--- a/src/common/packet-metadata-test.cc Wed Aug 29 12:32:18 2007 +0100
+++ b/src/common/packet-metadata-test.cc Wed Sep 05 16:28:55 2007 +0200
@@ -217,6 +217,7 @@
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 @@
} \
}
+
+Packet
+PacketMetadataTest::DoAddHeader (Packet p)
+{
+ ADD_HEADER (p, 10);
+ return p;
+}
+
bool
PacketMetadataTest::RunTests (void)
{
@@ -659,6 +668,11 @@
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;
}
--- a/src/common/packet-metadata.h Wed Aug 29 12:32:18 2007 +0100
+++ b/src/common/packet-metadata.h Wed Sep 05 16:28:55 2007 +0200
@@ -306,24 +306,23 @@
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 ()