Pass TcpSockets as smart pointers into demux callbacks
fixes TcpSocket memory leaks
--- 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);
}