add failing test and fix for assignment to self

This commit is contained in:
Mathieu Lacage
2007-09-05 16:28:55 +02:00
parent a2fb5d5cbe
commit b43e2f9190
2 changed files with 25 additions and 12 deletions

View File

@@ -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;
}

View File

@@ -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 ()