From 64a7dac84bbee4fff8e5680bacb38186931a57cc Mon Sep 17 00:00:00 2001 From: Craig Dowell Date: Wed, 3 Dec 2008 17:47:03 -0800 Subject: [PATCH] fix bug 431 -- memory leak in bridge net device --- examples/wifi-wired-bridging.cc | 9 +++++---- src/devices/bridge/bridge-net-device.cc | 27 +++++++++++++++++-------- src/devices/bridge/bridge-net-device.h | 1 + 3 files changed, 25 insertions(+), 12 deletions(-) diff --git a/examples/wifi-wired-bridging.cc b/examples/wifi-wired-bridging.cc index 3d0ffb69e..9eacb9ca4 100644 --- a/examples/wifi-wired-bridging.cc +++ b/examples/wifi-wired-bridging.cc @@ -14,6 +14,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +// // Default network topology includes some number of AP nodes specified by // the variable nWifis (defaults to two). Off of each AP node, there are some // number of STA nodes specified by the variable nStas (defaults to two). @@ -176,6 +177,7 @@ int main (int argc, char *argv[]) dest = tmp; protocol = "ns3::PacketSocketFactory"; } + OnOffHelper onoff = OnOffHelper (protocol, dest); onoff.SetAttribute ("OnTime", RandomVariableValue (ConstantVariable (1))); onoff.SetAttribute ("OffTime", RandomVariableValue (ConstantVariable (0))); @@ -183,11 +185,10 @@ int main (int argc, char *argv[]) apps.Start (Seconds (0.5)); apps.Stop (Seconds (3.0)); - - YansWifiPhyHelper::EnablePcap ("wifi-wire-bridging", staNodes[1].Get (1)); - YansWifiPhyHelper::EnablePcap ("wifi-wire-bridging", staNodes[0].Get (0)); + YansWifiPhyHelper::EnablePcap ("wifi-wired-bridging", staNodes[1].Get (1)); + YansWifiPhyHelper::EnablePcap ("wifi-wired-bridging", staNodes[0].Get (0)); std::ofstream os; - os.open ("wifi-wire-bridging.mob"); + os.open ("wifi-wired-bridging.mob"); MobilityHelper::EnableAsciiAll (os); Simulator::Stop (Seconds (100.0)); diff --git a/src/devices/bridge/bridge-net-device.cc b/src/devices/bridge/bridge-net-device.cc index 413540157..a8e018a10 100644 --- a/src/devices/bridge/bridge-net-device.cc +++ b/src/devices/bridge/bridge-net-device.cc @@ -61,6 +61,25 @@ BridgeNetDevice::BridgeNetDevice () m_channel = CreateObject (); } +BridgeNetDevice::~BridgeNetDevice() +{ + NS_LOG_FUNCTION_NOARGS (); +} + + void +BridgeNetDevice::DoDispose () +{ + NS_LOG_FUNCTION_NOARGS (); + for (std::vector< Ptr >::iterator iter = m_ports.begin (); iter != m_ports.end (); iter++) + { + *iter = 0; + } + m_ports.clear (); + m_channel = 0; + m_node = 0; + NetDevice::DoDispose (); +} + void BridgeNetDevice::ReceiveFromDevice (Ptr incomingPort, Ptr packet, uint16_t protocol, Address const &src, Address const &dst, PacketType packetType) @@ -421,14 +440,6 @@ BridgeNetDevice::SupportsSendFrom () const return true; } -void -BridgeNetDevice::DoDispose (void) -{ - NS_LOG_FUNCTION_NOARGS (); - m_node = 0; - NetDevice::DoDispose (); -} - Address BridgeNetDevice::GetMulticast (Ipv6Address addr) const { NS_LOG_FUNCTION (this << addr); diff --git a/src/devices/bridge/bridge-net-device.h b/src/devices/bridge/bridge-net-device.h index 4353a5f58..4af590c97 100644 --- a/src/devices/bridge/bridge-net-device.h +++ b/src/devices/bridge/bridge-net-device.h @@ -68,6 +68,7 @@ class BridgeNetDevice : public NetDevice public: static TypeId GetTypeId (void); BridgeNetDevice (); + virtual ~BridgeNetDevice (); /** \brief Add a 'port' to a bridge device *