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