Pass TcpSockets as smart pointers into demux callbacks
authorRaj Bhattacharjea <raj.b@gatech.edu>
Thu, 20 Mar 2008 14:04:24 -0400
changeset 2668 4956586bd798
parent 2667 2324032b8f90
child 2669 43ec4c995363
Pass TcpSockets as smart pointers into demux callbacks fixes TcpSocket memory leaks
src/internet-node/tcp-socket.cc
--- a/src/internet-node/tcp-socket.cc	Thu Mar 20 10:25:59 2008 -0700
+++ b/src/internet-node/tcp-socket.cc	Thu Mar 20 14:04:24 2008 -0400
@@ -125,6 +125,7 @@
 TcpSocket::~TcpSocket ()
 {
   NS_LOG_FUNCTION;
+  NS_LOG_PARAMS(this);
   m_node = 0;
   if (m_endPoint != 0)
     {
@@ -204,8 +205,8 @@
     {
       return -1;
     }
-  m_endPoint->SetRxCallback (MakeCallback (&TcpSocket::ForwardUp, this));
-  m_endPoint->SetDestroyCallback (MakeCallback (&TcpSocket::Destroy, this));
+  m_endPoint->SetRxCallback (MakeCallback (&TcpSocket::ForwardUp, Ptr<TcpSocket>(this)));
+  m_endPoint->SetDestroyCallback (MakeCallback (&TcpSocket::Destroy, Ptr<TcpSocket>(this)));
   m_localAddress = m_endPoint->GetLocalAddress ();
   m_localPort = m_endPoint->GetLocalPort ();
   return 0;
@@ -777,8 +778,8 @@
   //the cloned socket with be in listen state, so manually change state
   m_state = SYN_RCVD;
   //equivalent to FinishBind
-  m_endPoint->SetRxCallback (MakeCallback (&TcpSocket::ForwardUp, this));
-  m_endPoint->SetDestroyCallback (MakeCallback (&TcpSocket::Destroy, this));
+  m_endPoint->SetRxCallback (MakeCallback (&TcpSocket::ForwardUp, Ptr<TcpSocket>(this)));
+  m_endPoint->SetDestroyCallback (MakeCallback (&TcpSocket::Destroy, Ptr<TcpSocket>(this)));
   ProcessPacketAction(SYN_ACK_TX, p, h, fromAddress);
  }