use Dispose more extensively
parent
3dbf9f25e1
commit
43154a6a64
|
@ -43,12 +43,23 @@ Arp::Arp (Node *node)
|
|||
}
|
||||
|
||||
Arp::~Arp ()
|
||||
{
|
||||
Dispose ();
|
||||
}
|
||||
|
||||
void
|
||||
Arp::Dispose (void)
|
||||
{
|
||||
for (CacheList::const_iterator i = m_cacheList.begin (); i != m_cacheList.end (); i++)
|
||||
{
|
||||
delete *i;
|
||||
}
|
||||
m_node->Unref ();
|
||||
m_cacheList.clear ();
|
||||
if (m_node != 0)
|
||||
{
|
||||
m_node->Unref ();
|
||||
m_node = 0;
|
||||
}
|
||||
}
|
||||
|
||||
Arp *
|
||||
|
|
|
@ -44,6 +44,8 @@ public:
|
|||
~Arp ();
|
||||
virtual Arp *Copy (Node *node) const;
|
||||
|
||||
virtual void Dispose (void);
|
||||
|
||||
virtual TraceResolver *CreateTraceResolver (TraceContext const &context);
|
||||
|
||||
virtual void Receive(Packet& p, NetDevice *device);
|
||||
|
|
|
@ -59,7 +59,6 @@ InternetNode::SetName (std::string name)
|
|||
m_name = name;
|
||||
}
|
||||
|
||||
|
||||
TraceResolver *
|
||||
InternetNode::CreateTraceResolver (TraceContext const &context)
|
||||
{
|
||||
|
@ -78,6 +77,9 @@ InternetNode::CreateTraceResolver (TraceContext const &context)
|
|||
|
||||
void InternetNode::Dispose()
|
||||
{
|
||||
m_l3Demux->Dispose ();
|
||||
m_ipv4L4Demux->Dispose ();
|
||||
|
||||
// chain up.
|
||||
Node::Dispose ();
|
||||
}
|
||||
|
|
|
@ -37,14 +37,25 @@ Ipv4L4Demux::Ipv4L4Demux (Node *node)
|
|||
}
|
||||
|
||||
Ipv4L4Demux::~Ipv4L4Demux()
|
||||
{
|
||||
Dispose ();
|
||||
}
|
||||
void
|
||||
Ipv4L4Demux::Dispose (void)
|
||||
{
|
||||
for (L4List_t::const_iterator i = m_protocols.begin(); i != m_protocols.end(); ++i)
|
||||
{
|
||||
(*i)->Dispose ();
|
||||
delete *i;
|
||||
}
|
||||
m_node->Unref ();
|
||||
m_node = 0;
|
||||
m_protocols.clear ();
|
||||
if (m_node != 0)
|
||||
{
|
||||
m_node->Unref ();
|
||||
m_node = 0;
|
||||
}
|
||||
}
|
||||
|
||||
Ipv4L4Demux*
|
||||
Ipv4L4Demux::Copy(Node *node) const
|
||||
{
|
||||
|
|
|
@ -44,6 +44,8 @@ public:
|
|||
Ipv4L4Demux (Node *node);
|
||||
virtual ~Ipv4L4Demux();
|
||||
|
||||
void Dispose (void);
|
||||
|
||||
/**
|
||||
* \param node the node on which the returned copy will run.
|
||||
* \returns a deep copy of this L4 Demux.
|
||||
|
|
|
@ -49,6 +49,8 @@ public:
|
|||
Ipv4L4Protocol(int protocolNumber, int version);
|
||||
virtual ~Ipv4L4Protocol ();
|
||||
|
||||
virtual void Dispose (void) = 0;
|
||||
|
||||
/**
|
||||
* \returns the protocol number of this protocol.
|
||||
*/
|
||||
|
|
|
@ -55,11 +55,18 @@ Ipv4::Ipv4(Node *node)
|
|||
m_node->Ref ();
|
||||
}
|
||||
Ipv4::~Ipv4 ()
|
||||
{
|
||||
Dispose ();
|
||||
}
|
||||
|
||||
void
|
||||
Ipv4::Dispose (void)
|
||||
{
|
||||
for (Ipv4InterfaceList::iterator i = m_interfaces.begin (); i != m_interfaces.end (); i++)
|
||||
{
|
||||
delete (*i);
|
||||
}
|
||||
m_interfaces.clear ();
|
||||
for (HostRoutesI i = m_hostRoutes.begin ();
|
||||
i != m_hostRoutes.end ();
|
||||
i = m_hostRoutes.erase (i))
|
||||
|
@ -72,8 +79,16 @@ Ipv4::~Ipv4 ()
|
|||
{
|
||||
delete (*j);
|
||||
}
|
||||
delete m_defaultRoute;
|
||||
m_node->Unref ();
|
||||
if (m_defaultRoute != 0)
|
||||
{
|
||||
delete m_defaultRoute;
|
||||
m_defaultRoute = 0;
|
||||
}
|
||||
if (m_node != 0)
|
||||
{
|
||||
m_node->Unref ();
|
||||
m_node = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -61,6 +61,8 @@ public:
|
|||
Ipv4(Node *node);
|
||||
virtual ~Ipv4 ();
|
||||
|
||||
virtual void Dispose (void);
|
||||
|
||||
/**
|
||||
* \param context the trace context to use to construct the
|
||||
* TraceResolver to return
|
||||
|
|
|
@ -36,13 +36,24 @@ L3Demux::L3Demux (Node *node)
|
|||
}
|
||||
|
||||
L3Demux::~L3Demux()
|
||||
{ // Delete each protocol in the map
|
||||
{
|
||||
Dispose ();
|
||||
}
|
||||
|
||||
void
|
||||
L3Demux::Dispose (void)
|
||||
{
|
||||
for (L3Map_t::iterator i = m_protocols.begin(); i != m_protocols.end(); ++i)
|
||||
{
|
||||
i->second->Dispose ();
|
||||
delete i->second;
|
||||
}
|
||||
m_node->Unref ();
|
||||
m_node = 0;
|
||||
m_protocols.clear ();
|
||||
if (m_node != 0)
|
||||
{
|
||||
m_node->Unref ();
|
||||
m_node = 0;
|
||||
}
|
||||
}
|
||||
|
||||
TraceResolver *
|
||||
|
|
|
@ -46,6 +46,8 @@ public:
|
|||
L3Demux(Node *node);
|
||||
virtual ~L3Demux();
|
||||
|
||||
void Dispose (void);
|
||||
|
||||
/**
|
||||
* \param node the node on which the returned copy will run.
|
||||
* \returns a deep copy of this L3 Demux.
|
||||
|
|
|
@ -44,6 +44,8 @@ public:
|
|||
int GetProtocolNumber (void) const;
|
||||
int GetVersion() const;
|
||||
|
||||
virtual void Dispose (void) = 0;
|
||||
|
||||
virtual L3Protocol* Copy(Node *node) const = 0;
|
||||
|
||||
virtual TraceResolver *CreateTraceResolver (TraceContext const &context) = 0;
|
||||
|
|
|
@ -39,8 +39,7 @@ UdpSocket::UdpSocket (Node *node)
|
|||
}
|
||||
UdpSocket::~UdpSocket ()
|
||||
{
|
||||
m_node->Unref ();
|
||||
m_node = 0;
|
||||
Destroy ();
|
||||
}
|
||||
|
||||
Node *
|
||||
|
@ -50,15 +49,20 @@ UdpSocket::PeekNode (void) const
|
|||
}
|
||||
|
||||
void
|
||||
UdpSocket::DestroyEndPoint (void)
|
||||
UdpSocket::Destroy (void)
|
||||
{
|
||||
if (m_node != 0)
|
||||
{
|
||||
m_node->Unref ();
|
||||
m_node = 0;
|
||||
}
|
||||
m_endPoint = 0;
|
||||
}
|
||||
int
|
||||
UdpSocket::FinishBind (void)
|
||||
{
|
||||
m_endPoint->SetRxCallback (MakeCallback (&UdpSocket::ForwardUp, this));
|
||||
m_endPoint->SetDestroyCallback (MakeCallback (&UdpSocket::DestroyEndPoint, this));
|
||||
m_endPoint->SetDestroyCallback (MakeCallback (&UdpSocket::Destroy, this));
|
||||
if (m_endPoint == 0)
|
||||
{
|
||||
return -1;
|
||||
|
|
|
@ -76,7 +76,7 @@ private:
|
|||
// invoked by Udp class
|
||||
int FinishBind (void);
|
||||
void ForwardUp (const Packet &p, Ipv4Address saddr, uint16_t sport);
|
||||
void DestroyEndPoint (void);
|
||||
void Destroy (void);
|
||||
Udp *GetUdp (void) const;
|
||||
int DoSendPacketTo (const Packet &p, Ipv4Address daddr, uint16_t dport,
|
||||
ns3::Callback<void, Socket*, uint32_t> dataSent);
|
||||
|
|
|
@ -47,9 +47,7 @@ Udp::Udp (Node *node)
|
|||
|
||||
Udp::~Udp ()
|
||||
{
|
||||
delete m_endPoints;
|
||||
m_node->Unref ();
|
||||
m_node = 0;
|
||||
Dispose ();
|
||||
}
|
||||
|
||||
TraceResolver *
|
||||
|
@ -58,6 +56,21 @@ Udp::CreateTraceResolver (TraceContext const &context)
|
|||
return new EmptyTraceResolver (context);
|
||||
}
|
||||
|
||||
void
|
||||
Udp::Dispose (void)
|
||||
{
|
||||
if (m_endPoints != 0)
|
||||
{
|
||||
delete m_endPoints;
|
||||
m_endPoints = 0;
|
||||
}
|
||||
if (m_node != 0)
|
||||
{
|
||||
m_node->Unref ();
|
||||
m_node = 0;
|
||||
}
|
||||
}
|
||||
|
||||
Socket *
|
||||
Udp::CreateSocket (void)
|
||||
{
|
||||
|
|
|
@ -43,6 +43,8 @@ public:
|
|||
Udp (Node *node);
|
||||
virtual ~Udp ();
|
||||
|
||||
virtual void Dispose (void);
|
||||
|
||||
virtual TraceResolver *CreateTraceResolver (TraceContext const &context);
|
||||
|
||||
Socket *CreateSocket (void);
|
||||
|
|
Loading…
Reference in New Issue