From de80ab4910a9d6a9b58794f65f8cc6c60b08dcce Mon Sep 17 00:00:00 2001 From: Raj Bhattacharjea Date: Thu, 20 Mar 2008 14:04:24 -0400 Subject: [PATCH 1/2] Pass TcpSockets as smart pointers into demux callbacks fixes TcpSocket memory leaks --- src/internet-node/tcp-socket.cc | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/internet-node/tcp-socket.cc b/src/internet-node/tcp-socket.cc index d77b52ade..ae1453c05 100644 --- a/src/internet-node/tcp-socket.cc +++ b/src/internet-node/tcp-socket.cc @@ -125,6 +125,7 @@ TcpSocket::TcpSocket(const TcpSocket& sock) TcpSocket::~TcpSocket () { NS_LOG_FUNCTION; + NS_LOG_PARAMS(this); m_node = 0; if (m_endPoint != 0) { @@ -204,8 +205,8 @@ TcpSocket::FinishBind (void) { return -1; } - m_endPoint->SetRxCallback (MakeCallback (&TcpSocket::ForwardUp, this)); - m_endPoint->SetDestroyCallback (MakeCallback (&TcpSocket::Destroy, this)); + m_endPoint->SetRxCallback (MakeCallback (&TcpSocket::ForwardUp, Ptr(this))); + m_endPoint->SetDestroyCallback (MakeCallback (&TcpSocket::Destroy, Ptr(this))); m_localAddress = m_endPoint->GetLocalAddress (); m_localPort = m_endPoint->GetLocalPort (); return 0; @@ -777,8 +778,8 @@ void TcpSocket::CompleteFork(Ptr p, const TcpHeader& h, const Address& f //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(this))); + m_endPoint->SetDestroyCallback (MakeCallback (&TcpSocket::Destroy, Ptr(this))); ProcessPacketAction(SYN_ACK_TX, p, h, fromAddress); } From 05b6cf11a80366a9bc59b41b4f96cb15fb5c51ad Mon Sep 17 00:00:00 2001 From: Raj Bhattacharjea Date: Thu, 20 Mar 2008 16:25:35 -0400 Subject: [PATCH 2/2] Fix TCP handshake sequence numbers --- src/internet-node/tcp-socket.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/internet-node/tcp-socket.cc b/src/internet-node/tcp-socket.cc index ae1453c05..02eff8931 100644 --- a/src/internet-node/tcp-socket.cc +++ b/src/internet-node/tcp-socket.cc @@ -673,11 +673,11 @@ bool TcpSocket::ProcessPacketAction (Actions_t a, Ptr p, NS_LOG_LOGIC ("TcpSocket " << this <<" Action ACK_TX_1"); // TCP SYN consumes one byte m_nextRxSequence = tcpHeader.GetSequenceNumber() + SequenceNumber(1); + m_nextTxSequence = tcpHeader.GetAckNumber (); NS_LOG_DEBUG ("TcpSocket " << this << " ACK_TX_1" << " nextRxSeq " << m_nextRxSequence); SendEmptyPacket (TcpHeader::ACK); m_rxWindowSize = tcpHeader.GetWindowSize (); - m_nextTxSequence = tcpHeader.GetAckNumber (); if (tcpHeader.GetAckNumber () > m_highestRxAck) { m_highestRxAck = tcpHeader.GetAckNumber ();