add failing test and fix for assignment to self
This commit is contained in:
@@ -217,6 +217,7 @@ private:
|
||||
template <int N>
|
||||
void RegisterTrailer (void);
|
||||
void CleanupPrints (void);
|
||||
Packet DoAddHeader (Packet p);
|
||||
bool Check (const char *file, int line, std::list<int> expected);
|
||||
|
||||
|
||||
@@ -430,6 +431,14 @@ PacketMetadataTest::CheckHistory (Packet p, const char *file, int line, uint32_t
|
||||
} \
|
||||
}
|
||||
|
||||
|
||||
Packet
|
||||
PacketMetadataTest::DoAddHeader (Packet p)
|
||||
{
|
||||
ADD_HEADER (p, 10);
|
||||
return p;
|
||||
}
|
||||
|
||||
bool
|
||||
PacketMetadataTest::RunTests (void)
|
||||
{
|
||||
@@ -659,6 +668,11 @@ PacketMetadataTest::RunTests (void)
|
||||
ADD_HEADER (p, 10);
|
||||
CHECK_HISTORY (p, 1, 10);
|
||||
|
||||
p = Packet ();
|
||||
ADD_HEADER (p, 10);
|
||||
p = DoAddHeader (p);
|
||||
CHECK_HISTORY (p, 2, 10, 10);
|
||||
|
||||
return ok;
|
||||
}
|
||||
|
||||
|
||||
@@ -306,24 +306,23 @@ PacketMetadata::PacketMetadata (PacketMetadata const &o)
|
||||
PacketMetadata &
|
||||
PacketMetadata::operator = (PacketMetadata const& o)
|
||||
{
|
||||
if (m_data == o.m_data)
|
||||
if (m_data != o.m_data)
|
||||
{
|
||||
// self assignment
|
||||
return *this;
|
||||
// not self assignment
|
||||
NS_ASSERT (m_data != 0);
|
||||
m_data->m_count--;
|
||||
if (m_data->m_count == 0)
|
||||
{
|
||||
PacketMetadata::Recycle (m_data);
|
||||
}
|
||||
m_data = o.m_data;
|
||||
NS_ASSERT (m_data != 0);
|
||||
m_data->m_count++;
|
||||
}
|
||||
NS_ASSERT (m_data != 0);
|
||||
m_data->m_count--;
|
||||
if (m_data->m_count == 0)
|
||||
{
|
||||
PacketMetadata::Recycle (m_data);
|
||||
}
|
||||
m_data = o.m_data;
|
||||
m_head = o.m_head;
|
||||
m_tail = o.m_tail;
|
||||
m_used = o.m_used;
|
||||
m_packetUid = o.m_packetUid;
|
||||
NS_ASSERT (m_data != 0);
|
||||
m_data->m_count++;
|
||||
return *this;
|
||||
}
|
||||
PacketMetadata::~PacketMetadata ()
|
||||
|
||||
Reference in New Issue
Block a user