avoid memory leaks
authorMathieu Lacage <mathieu.lacage@sophia.inria.fr>
Sun, 02 Mar 2008 06:43:12 +0100
changeset 2530 05f9cec44621
parent 2529 d5f8bee5fcbd
child 2531 b451b5fc8b57
avoid memory leaks
src/devices/wifi/adhoc-wifi-mac.cc
src/devices/wifi/adhoc-wifi-mac.h
src/devices/wifi/dca-txop.cc
src/devices/wifi/dca-txop.h
src/devices/wifi/mac-low.cc
src/devices/wifi/mac-low.h
src/devices/wifi/wifi-net-device.cc
src/devices/wifi/wifi-net-device.h
src/devices/wifi/wifi-phy.cc
src/devices/wifi/wifi-phy.h
src/devices/wifi/wifi-remote-station-manager.cc
src/devices/wifi/wifi-remote-station-manager.h
--- a/src/devices/wifi/adhoc-wifi-mac.cc	Sun Mar 02 06:32:03 2008 +0100
+++ b/src/devices/wifi/adhoc-wifi-mac.cc	Sun Mar 02 06:43:12 2008 +0100
@@ -48,7 +48,7 @@
   m_rxMiddle = new MacRxMiddle ();
   m_rxMiddle->SetForwardCallback (MakeCallback (&AdhocWifiMac::ForwardUp, this));
 
-  m_low = new MacLow ();
+  m_low = CreateObjectWith<MacLow> ();
   m_low->SetRxCallback (MakeCallback (&MacRxMiddle::Receive, m_rxMiddle));
   m_low->SetMac (this);
 
@@ -66,12 +66,13 @@
 AdhocWifiMac::DoDispose (void)
 {
   delete m_rxMiddle;
-  delete m_low;
   delete m_dcfManager;
   m_rxMiddle = 0;
+  m_dcfManager = 0;
   m_low = 0;
-  m_dcfManager = 0;
   m_phy = 0;
+  m_dca = 0;
+  m_stationManager = 0;
   WifiMac::DoDispose ();
 }
 
--- a/src/devices/wifi/adhoc-wifi-mac.h	Sun Mar 02 06:32:03 2008 +0100
+++ b/src/devices/wifi/adhoc-wifi-mac.h	Sun Mar 02 06:43:12 2008 +0100
@@ -79,7 +79,7 @@
   Ptr<WifiPhy> m_phy;
   DcfManager *m_dcfManager;
   MacRxMiddle *m_rxMiddle;
-  MacLow *m_low;
+  Ptr<MacLow> m_low;
   Mac48Address m_address;
   Ssid m_ssid;
 };
--- a/src/devices/wifi/dca-txop.cc	Sun Mar 02 06:32:03 2008 +0100
+++ b/src/devices/wifi/dca-txop.cc	Sun Mar 02 06:43:12 2008 +0100
@@ -138,16 +138,22 @@
 }
 
 DcaTxop::~DcaTxop ()
+{}
+
+void
+DcaTxop::DoDispose (void)
 {
   delete m_transmissionListener;
   delete m_dcf;
   delete m_rng;
   delete m_txMiddle;
   m_transmissionListener = 0;
-  m_queue = 0;
   m_dcf = 0;
   m_rng = 0;
   m_txMiddle = 0;
+  m_queue = 0;
+  m_low = 0;
+  m_stationManager = 0;
 }
 
 void
--- a/src/devices/wifi/dca-txop.h	Sun Mar 02 06:32:03 2008 +0100
+++ b/src/devices/wifi/dca-txop.h	Sun Mar 02 06:43:12 2008 +0100
@@ -144,6 +144,7 @@
   bool IsLastFragment (void);
   void NextFragment (void);
   Ptr<Packet> GetFragmentPacket (WifiMacHeader *hdr);
+  virtual void DoDispose (void);
 
   Dcf *m_dcf;
   DcfManager *m_manager;
--- a/src/devices/wifi/mac-low.cc	Sun Mar 02 06:32:03 2008 +0100
+++ b/src/devices/wifi/mac-low.cc	Sun Mar 02 06:43:12 2008 +0100
@@ -238,9 +238,15 @@
 }
 
 MacLow::~MacLow ()
+{}
+
+void 
+MacLow::DoDispose (void)
 {
   CancelAllEvents ();
   m_phy = 0;
+  m_mac = 0;
+  m_stationManager = 0;
 }
 
 void
--- a/src/devices/wifi/mac-low.h	Sun Mar 02 06:32:03 2008 +0100
+++ b/src/devices/wifi/mac-low.h	Sun Mar 02 06:43:12 2008 +0100
@@ -382,6 +382,7 @@
   void SendDataPacket (void);
   void SendCurrentTxPacket (void);
   void StartDataTxTimers (void);
+  virtual void DoDispose (void);
 
   Ptr<WifiPhy> m_phy;
   Ptr<WifiMac> m_mac;
--- a/src/devices/wifi/wifi-net-device.cc	Sun Mar 02 06:32:03 2008 +0100
+++ b/src/devices/wifi/wifi-net-device.cc	Sun Mar 02 06:43:12 2008 +0100
@@ -47,6 +47,20 @@
 {}
 WifiNetDevice::~WifiNetDevice ()
 {}
+
+void
+WifiNetDevice::DoDispose (void)
+{
+  m_node = 0;
+  m_mac->Dispose ();
+  m_phy->Dispose ();
+  m_stationManager->Dispose ();
+  m_mac = 0;
+  m_phy = 0;
+  m_stationManager = 0;
+  // chain up.
+  NetDevice::DoDispose ();
+}
   
 void 
 WifiNetDevice::Setup (Ptr<Node> node, Ptr<WifiMac> mac, Ptr<WifiPhy> phy,
--- a/src/devices/wifi/wifi-net-device.h	Sun Mar 02 06:32:03 2008 +0100
+++ b/src/devices/wifi/wifi-net-device.h	Sun Mar 02 06:43:12 2008 +0100
@@ -78,6 +78,7 @@
   virtual void SetReceiveCallback (NetDevice::ReceiveCallback cb);
 
 private:
+  virtual void DoDispose (void);
   void ForwardUp (Ptr<Packet> packet, const Mac48Address &from);
   void LinkUp (void);
   void LinkDown (void);
--- a/src/devices/wifi/wifi-phy.cc	Sun Mar 02 06:32:03 2008 +0100
+++ b/src/devices/wifi/wifi-phy.cc	Sun Mar 02 06:43:12 2008 +0100
@@ -254,6 +254,10 @@
 {}
 
 WifiPhy::~WifiPhy ()
+{}
+
+void
+WifiPhy::DoDispose (void)
 {
   m_channel = 0;
   m_events.clear ();
--- a/src/devices/wifi/wifi-phy.h	Sun Mar 02 06:32:03 2008 +0100
+++ b/src/devices/wifi/wifi-phy.h	Sun Mar 02 06:43:12 2008 +0100
@@ -266,6 +266,7 @@
   typedef std::vector <NiChange> NiChanges;
 
 private:
+  virtual void DoDispose (void);
   void Configure80211aParameters (void);
   void PrintModes (void) const;
   void Configure80211a (void);
--- a/src/devices/wifi/wifi-remote-station-manager.cc	Sun Mar 02 06:32:03 2008 +0100
+++ b/src/devices/wifi/wifi-remote-station-manager.cc	Sun Mar 02 06:43:12 2008 +0100
@@ -155,6 +155,10 @@
 
 WifiRemoteStationManager::~WifiRemoteStationManager ()
 {
+}
+void 
+WifiRemoteStationManager::DoDispose (void)
+{
   for (Stations::const_iterator i = m_stations.begin (); i != m_stations.end (); i++) 
     {
       delete (*i).second;
--- a/src/devices/wifi/wifi-remote-station-manager.h	Sun Mar 02 06:32:03 2008 +0100
+++ b/src/devices/wifi/wifi-remote-station-manager.h	Sun Mar 02 06:43:12 2008 +0100
@@ -76,6 +76,8 @@
 
   WifiRemoteStation *Lookup (Mac48Address address);
   WifiRemoteStation *LookupNonUnicast (void);
+protected:
+  virtual void DoDispose (void);
 private:
   typedef std::vector <std::pair<Mac48Address, WifiRemoteStation *> > Stations;
   virtual class WifiRemoteStation *CreateStation (void) = 0;