Fixed valgrind errors

This commit is contained in:
ltracy
2010-07-09 13:29:12 -07:00
parent 33158c3969
commit f40bedb441
28 changed files with 375 additions and 52 deletions

View File

@@ -147,9 +147,11 @@ Experiment::CreateDualModes (uint32_t fc)
}
uint32_t
Experiment::Run (UanHelper &uan, uint32_t param)
Experiment::Run (uint32_t param)
{
UanHelper uan;
m_bytesTotal=0;
uint32_t nNodes;
@@ -166,6 +168,10 @@ Experiment::Run (UanHelper &uan, uint32_t param)
}
Time pDelay = Seconds((double) m_maxRange / 1500.0);
uan.SetPhy ("ns3::UanPhyDual",
"SupportedModesPhy1", UanModesListValue (m_dataModes),
"SupportedModesPhy2", UanModesListValue (m_controlModes));
uan.SetMac ("ns3::UanMacRcGw",
"NumberOfRates", UintegerValue (m_numRates),
"NumberOfNodes", UintegerValue (nNodes),
@@ -241,12 +247,6 @@ Experiment::Run (UanHelper &uan, uint32_t param)
sinkSocket->SetRecvCallback (MakeCallback (&Experiment::ReceivePacket, this));
Simulator::Stop (m_simTime + Seconds(0.6));
chan = 0;
sinkNode = 0;
sinkSocket = 0;
pos = 0;
Simulator::Run ();
Simulator::Destroy ();
@@ -279,15 +279,12 @@ main(int argc, char *argv[])
exp.CreateDualModes (12000);
UanHelper uan;
uan.SetPhy ("ns3::UanPhyDual",
"SupportedModesPhy1", UanModesListValue (exp.m_dataModes),
"SupportedModesPhy2", UanModesListValue (exp.m_controlModes));
;
Gnuplot2dDataset ds;
for (uint32_t param=exp.m_simMin; param<=exp.m_simMax; param += exp.m_simStep)
{
uint32_t bytesRx = exp.Run (uan, param);
uint32_t bytesRx = exp.Run (param);
NS_LOG_DEBUG ("param=" << param << ": Received " << bytesRx << " bytes at sink");
double util = bytesRx*8.0/(exp.m_simTime.GetSeconds ()*exp.m_totalRate);

View File

@@ -57,7 +57,7 @@ public:
bool upperblock,
std::string name);
void CreateDualModes (uint32_t fc);
uint32_t Run (UanHelper &uan, uint32_t param);
uint32_t Run (uint32_t param);
Experiment();

View File

@@ -65,25 +65,55 @@ UanChannel::GetTypeId ()
UanChannel::UanChannel ()
: Channel (),
m_prop (0)
m_prop (0),
m_cleared (false)
{
}
UanChannel::~UanChannel ()
{
}
void
UanChannel::DoDispose ()
UanChannel::Clear ()
{
if (m_cleared)
{
return;
}
m_cleared = true;
UanDeviceList::iterator it = m_devList.begin ();
for (; it != m_devList.end (); it++)
{
it->first = 0;
it->second = 0;
if (it->first)
{
it->first->Clear ();
it->first = 0;
}
if (it->second)
{
it->second->Clear ();
it->second = 0;
}
}
m_devList.clear ();
m_prop = 0;
m_noise = 0;
if (m_prop)
{
m_prop->Clear ();
m_prop = 0;
}
if (m_noise)
{
m_noise->Clear ();
m_noise = 0;
}
}
void
UanChannel::DoDispose ()
{
Clear ();
Channel::DoDispose ();
}
void

View File

@@ -94,10 +94,16 @@ public:
*/
double GetNoiseDbHz (double fKhz);
/**
* Clears all pointer references
*/
void Clear (void);
private:
UanDeviceList m_devList;
Ptr<UanPropModel> m_prop;
Ptr<UanNoiseModel> m_noise;
bool m_cleared;
void SendUp (uint32_t i, Ptr<Packet> packet, double rxPowerDb, UanTxMode txMode, UanPdp pdp);
protected:

View File

@@ -35,7 +35,8 @@ namespace ns3
NS_OBJECT_ENSURE_REGISTERED (UanMacAloha);
UanMacAloha::UanMacAloha ()
: UanMac ()
: UanMac (),
m_cleared (false)
{
}
@@ -43,10 +44,25 @@ UanMacAloha::~UanMacAloha ()
{
}
void
UanMacAloha::Clear ()
{
if (m_cleared)
{
return;
}
m_cleared = true;
if (m_phy)
{
m_phy->Clear ();
m_phy = 0;
}
}
void
UanMacAloha::DoDispose ()
{
m_phy = 0;
Clear ();
UanMac::DoDispose ();
}

View File

@@ -54,11 +54,13 @@ public:
virtual void SetForwardUpCb (Callback<void, Ptr<Packet>, const UanAddress& > cb);
virtual void AttachPhy (Ptr<UanPhy> phy);
virtual Address GetBroadcast (void) const;
virtual void Clear (void);
private:
UanAddress m_address;
Ptr<UanPhy> m_phy;
Callback<void, Ptr<Packet>, const UanAddress& > m_forUpCb;
bool m_cleared;
/**
* \brief Receive packet from lower layer (passed to PHY as callback)

View File

@@ -38,7 +38,8 @@ UanMacCw::UanMacCw ()
: UanMac (),
m_phy (0),
m_pktTx (0),
m_state (IDLE)
m_state (IDLE),
m_cleared (false)
{
}
@@ -48,12 +49,27 @@ UanMacCw::~UanMacCw ()
}
void
UanMacCw::DoDispose ()
UanMacCw::Clear ()
{
if (m_cleared)
{
return;
}
m_cleared = true;
m_pktTx = 0;
m_phy = 0;
if (m_phy)
{
m_phy->Clear ();
m_phy = 0;
}
m_sendEvent.Cancel ();
m_txEndEvent.Cancel ();
}
void
UanMacCw::DoDispose ()
{
Clear ();
UanMac::DoDispose ();
}

View File

@@ -72,6 +72,7 @@ public:
virtual void SetForwardUpCb (Callback<void, Ptr<Packet>, const UanAddress&> cb);
virtual void AttachPhy (Ptr<UanPhy> phy);
virtual Address GetBroadcast (void) const;
virtual void Clear (void);
// PHY listeners
/// Function called by UanPhy object to notify of packet reception
@@ -111,6 +112,8 @@ private:
EventId m_txEndEvent;
State m_state;
bool m_cleared;
void PhyRxPacketGood (Ptr<Packet> packet, double sinr, UanTxMode mode);
void PhyRxPacketError (Ptr<Packet> packet, double sinr);
void SaveTimer (void);

View File

@@ -54,7 +54,8 @@ operator < (UanAddress &a, UanAddress &b)
UanMacRcGw::UanMacRcGw ()
: UanMac (),
m_state (IDLE),
m_currentRateNum (0)
m_currentRateNum (0),
m_cleared (false)
{
UanHeaderCommon ch;
UanHeaderRcRts rts;
@@ -75,8 +76,18 @@ UanMacRcGw::~UanMacRcGw ()
}
void
UanMacRcGw::DoDispose ()
UanMacRcGw::Clear ()
{
if (m_cleared)
{
return;
}
m_cleared = true;
if (m_phy)
{
m_phy->Clear ();
m_phy = 0;
}
m_propDelay.clear ();
std::map<UanAddress, AckData>::iterator it = m_ackData.begin ();
for (; it != m_ackData.end (); it++)
@@ -86,6 +97,12 @@ UanMacRcGw::DoDispose ()
m_ackData.clear ();
m_requests.clear ();
m_sortedRes.clear ();
}
void
UanMacRcGw::DoDispose ()
{
Clear ();
UanMac::DoDispose ();
}
TypeId

View File

@@ -72,6 +72,7 @@ public:
virtual void SetForwardUpCb (Callback<void, Ptr<Packet>, const UanAddress&> cb);
virtual void AttachPhy (Ptr<UanPhy> phy);
virtual Address GetBroadcast (void) const;
virtual void Clear (void);
private:
enum State {
@@ -125,6 +126,8 @@ private:
std::map<UanAddress, Request> m_requests;
std::set<std::pair<Time, UanAddress> > m_sortedRes;
bool m_cleared;
TracedCallback<Ptr<const Packet>, UanTxMode > m_rxLogger;
// Start time, min p-delay, reservations, frames, bytes, window size, ctl rate, retry rate

View File

@@ -156,7 +156,8 @@ UanMacRc::UanMacRc ()
m_state (UNASSOCIATED),
m_rtsBlocked (false),
m_currentRate (10),
m_frameNo (0)
m_frameNo (0),
m_cleared (false)
{
UanHeaderCommon ch;
UanHeaderRcCts ctsh;
@@ -171,9 +172,18 @@ UanMacRc::~UanMacRc ()
}
void
UanMacRc::DoDispose ()
UanMacRc::Clear ()
{
m_phy = 0;
if (m_cleared)
{
return;
}
m_cleared = true;
if (m_phy)
{
m_phy->Clear ();
m_phy = 0;
}
std::list<std::pair <Ptr<Packet>, UanAddress > >::iterator it;
for (it = m_pktQueue.begin (); it != m_pktQueue.end (); it++)
{
@@ -183,7 +193,12 @@ UanMacRc::DoDispose ()
m_resList.clear ();
m_startAgain.Cancel ();
m_rtsEvent.Cancel ();
}
void
UanMacRc::DoDispose ()
{
Clear ();
UanMac::DoDispose ();
}

View File

@@ -151,6 +151,7 @@ public:
virtual void SetForwardUpCb (Callback<void, Ptr<Packet>, const UanAddress&> cb);
virtual void AttachPhy (Ptr<UanPhy> phy);
virtual Address GetBroadcast (void) const;
virtual void Clear (void);
private:
enum State {
@@ -180,6 +181,8 @@ private:
uint32_t m_ctsSizeN;
uint32_t m_ctsSizeG;
bool m_cleared;
std::list<std::pair <Ptr<Packet>, UanAddress > > m_pktQueue;
std::list<Reservation> m_resList;

View File

@@ -84,6 +84,11 @@ public:
*/
virtual Address GetBroadcast (void) const = 0;
/**
* Clears all pointer references
*/
virtual void Clear (void) = 0;
};
}

View File

@@ -38,7 +38,8 @@ NS_OBJECT_ENSURE_REGISTERED (UanNetDevice);
UanNetDevice::UanNetDevice ()
: NetDevice (),
m_mtu (64000)
m_mtu (64000),
m_cleared (false)
{
}
@@ -46,14 +47,41 @@ UanNetDevice::~UanNetDevice ()
{
}
void
UanNetDevice::Clear ()
{
if (m_cleared)
{
return;
}
m_cleared = true;
m_node = 0;
if (m_channel)
{
m_channel->Clear ();
m_channel = 0;
}
if (m_mac)
{
m_mac->Clear ();
m_mac = 0;
}
if (m_phy)
{
m_phy->Clear ();
m_phy = 0;
}
if (m_trans)
{
m_trans->Clear ();
m_trans = 0;
}
}
void
UanNetDevice::DoDispose ()
{
m_node = 0;
m_channel = 0;
m_mac = 0;
m_phy = 0;
m_trans = 0;
Clear ();
NetDevice::DoDispose ();
}

View File

@@ -90,6 +90,11 @@ public:
*/
void SetTransducer (Ptr<UanTransducer> trans);
/**
* Clears all pointer references
*/
void Clear (void);
// Purely virtual functions from base class
virtual void SetIfIndex (const uint32_t index);
virtual uint32_t GetIfIndex (void) const;
@@ -134,6 +139,9 @@ private:
TracedCallback<Ptr<const Packet>, UanAddress> m_rxLogger;
TracedCallback<Ptr<const Packet>, UanAddress> m_txLogger;
bool m_cleared;
protected:
virtual void DoDispose ();
};

View File

@@ -34,6 +34,12 @@ public:
*/
virtual double GetNoiseDbHz (double fKhz) const = 0;
/**
* Clears all pointer references
*/
virtual void Clear (void);
virtual void DoDispose (void);
};
} // namespace ns3

View File

@@ -131,11 +131,24 @@ UanPhyDual::~UanPhyDual ()
{
}
void
UanPhyDual::Clear ()
{
if (m_phy1)
{
m_phy1->Clear ();
m_phy1 = 0;
}
if (m_phy2)
{
m_phy2->Clear ();
m_phy2 = 0;
}
}
void
UanPhyDual::DoDispose ()
{
m_phy1 = 0;
m_phy2 = 0;
Clear ();
UanPhy::DoDispose ();
}

View File

@@ -114,6 +114,7 @@ public:
virtual Ptr<UanTransducer> GetTransducer (void);
virtual uint32_t GetNModes (void);
virtual UanTxMode GetMode (uint32_t n);
virtual void Clear (void);
/**
* /returns True if Phy1 is Idle

View File

@@ -352,7 +352,8 @@ UanPhyGen::UanPhyGen ()
m_txPwrDb (0),
m_rxThreshDb (0),
m_ccaThreshDb (0),
m_pktRx (0)
m_pktRx (0),
m_cleared (false)
{
}
@@ -362,17 +363,52 @@ UanPhyGen::~UanPhyGen ()
}
void
UanPhyGen::Clear ()
{
if (m_cleared)
{
return;
}
m_cleared = true;
m_listeners.clear ();
if (m_channel)
{
m_channel->Clear ();
m_channel = 0;
}
if (m_transducer)
{
m_transducer->Clear ();
m_transducer = 0;
}
if (m_device)
{
m_device->Clear ();
m_device = 0;
}
if (m_mac)
{
m_mac->Clear ();
m_mac = 0;
}
if (m_per)
{
m_per->Clear ();
m_per = 0;
}
if (m_sinr)
{
m_sinr->Clear ();
m_sinr = 0;
}
m_pktRx = 0;
}
void
UanPhyGen::DoDispose ()
{
m_listeners.clear ();
m_channel = 0;
m_transducer = 0;
m_device = 0;
m_mac = 0;
m_per = 0;
m_sinr = 0;
m_pktRx = 0;
Clear ();
UanPhy::DoDispose ();
}

View File

@@ -195,6 +195,7 @@ public:
virtual uint32_t GetNModes (void);
virtual UanTxMode GetMode (uint32_t n);
virtual Ptr<Packet> GetPacketRx (void) const;
virtual void Clear (void);
private:
typedef std::list<UanPhyListener *> ListenerList;
@@ -225,6 +226,8 @@ private:
UanPdp m_pktRxPdp;
UanTxMode m_pktRxMode;
bool m_cleared;
TracedCallback<Ptr<const Packet>, double, UanTxMode > m_rxOkLogger;
TracedCallback<Ptr<const Packet>, double, UanTxMode > m_rxErrLogger;
TracedCallback<Ptr<const Packet>, double, UanTxMode > m_txLogger;

View File

@@ -0,0 +1,49 @@
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2009 University of Washington
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation;
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Author: Leonard Tracy <lentracy@gmail.com>
*/
#include "uan-phy.h"
namespace ns3 {
void
UanPhyCalcSinr::Clear ()
{
}
void
UanPhyCalcSinr::DoDispose ()
{
Clear ();
Object::DoDispose ();
}
void
UanPhyPer::Clear ()
{
}
void
UanPhyPer::DoDispose ()
{
Clear ();
Object::DoDispose ();
}
} //namespace ns3

View File

@@ -59,6 +59,13 @@ public:
UanPdp pdp,
const UanTransducer::ArrivalList &arrivalList
) const = 0;
/**
* Clears all pointer references
*/
virtual void Clear (void);
virtual void DoDispose (void);
/**
* \param db dB value
* \returns kilopascals
@@ -77,6 +84,7 @@ public:
{
return 10 * log10 (kp);
}
};
/**
@@ -96,6 +104,12 @@ public:
* \returns Probability of packet error
*/
virtual double CalcPer (Ptr<Packet> pkt, double sinrDb, UanTxMode mode) = 0;
/**
* Clears all pointer references
*/
virtual void Clear (void);
virtual void DoDispose (void);
};
@@ -334,6 +348,11 @@ public:
* \returns Packet currently being received in PHY
*/
virtual Ptr<Packet> GetPacketRx (void) const = 0;
/**
* Clears all pointer references
*/
virtual void Clear (void) = 0;
};
}

View File

@@ -336,4 +336,16 @@ UanPdp::CreateImpulsePdp (void)
return pdp;
}
void
UanPropModel::Clear (void)
{
}
void
UanPropModel::DoDispose (void)
{
Clear ();
Object::DoDispose ();
}
}

View File

@@ -241,6 +241,12 @@ public:
*/
virtual Time GetDelay (Ptr<MobilityModel> a, Ptr<MobilityModel> b, UanTxMode mode) = 0;
/**
* Clears all pointer references
*/
virtual void Clear (void);
virtual void DoDispose (void);
};
}

View File

@@ -35,7 +35,8 @@ NS_OBJECT_ENSURE_REGISTERED (UanTransducerHd);
UanTransducerHd::UanTransducerHd ()
: UanTransducer (),
m_state (RX),
m_endTxTime (Seconds (0))
m_endTxTime (Seconds (0)),
m_cleared (false)
{
}
@@ -44,13 +45,27 @@ UanTransducerHd::~UanTransducerHd ()
}
void
UanTransducerHd::DoDispose ()
UanTransducerHd::Clear ()
{
m_channel = 0;
if (m_cleared)
{
return;
}
m_cleared = true;
if (m_channel)
{
m_channel->Clear ();
m_channel = 0;
}
UanPhyList::iterator it = m_phyList.begin ();
for (; it != m_phyList.end (); it++)
{
*it = 0;
if (*it)
{
(*it)->Clear ();
*it = 0;
}
}
ArrivalList::iterator ait = m_arrivalList.begin ();
for (; ait != m_arrivalList.end (); ait++)
@@ -60,7 +75,12 @@ UanTransducerHd::DoDispose ()
m_phyList.clear ();
m_arrivalList.clear ();
m_endTxEvent.Cancel ();
}
void
UanTransducerHd::DoDispose ()
{
Clear ();
UanTransducer::DoDispose ();
}
TypeId

View File

@@ -50,6 +50,7 @@ public:
virtual Ptr<UanChannel> GetChannel (void) const;
virtual void AddPhy (Ptr<UanPhy>);
virtual const UanPhyList &GetPhyList (void) const;
virtual void Clear (void);
private:
State m_state;
@@ -58,6 +59,7 @@ private:
Ptr<UanChannel> m_channel;
EventId m_endTxEvent;
Time m_endTxTime;
bool m_cleared;
void RemoveArrival (UanPacketArrival arrival);
void EndTx (void);

View File

@@ -186,6 +186,11 @@ public:
* \returns List of all Phy's this transducer sends packets to.
*/
virtual const UanPhyList &GetPhyList (void) const = 0;
/**
* Clears all pointer references
*/
virtual void Clear (void) = 0;
};
} // namespace ns3

View File

@@ -22,7 +22,9 @@ def build(bld):
'uan-header-rc.cc',
'uan-mac-rc.cc',
'uan-mac-rc-gw.cc',
# 'uan-test.cc'
'uan-test.cc',
'uan-phy.cc',
'uan-noise-model.cc'
]
headers = bld.new_task_gen('ns3header')
headers.module = 'uan'