From b43e2f91902ce161e62934c58c863e4c2be95366 Mon Sep 17 00:00:00 2001 From: Mathieu Lacage Date: Wed, 5 Sep 2007 16:28:55 +0200 Subject: [PATCH] add failing test and fix for assignment to self --- src/common/packet-metadata-test.cc | 14 ++++++++++++++ src/common/packet-metadata.h | 23 +++++++++++------------ 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/src/common/packet-metadata-test.cc b/src/common/packet-metadata-test.cc index e3e61c45e..edca62626 100644 --- a/src/common/packet-metadata-test.cc +++ b/src/common/packet-metadata-test.cc @@ -217,6 +217,7 @@ private: template void RegisterTrailer (void); void CleanupPrints (void); + Packet DoAddHeader (Packet p); bool Check (const char *file, int line, std::list 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; } diff --git a/src/common/packet-metadata.h b/src/common/packet-metadata.h index b193093f9..12223a4bb 100644 --- a/src/common/packet-metadata.h +++ b/src/common/packet-metadata.h @@ -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 ()