From 3bc0fcc66e9c927242db24c2f258c27a97f3025c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20F=C3=A4rber?= Date: Wed, 1 Sep 2010 18:19:57 +0000 Subject: [PATCH] boot_net: Fix TCP memory leaks In some error conditions the packet would have been leaked. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38503 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/system/boot/loader/net/TCP.cpp | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/system/boot/loader/net/TCP.cpp b/src/system/boot/loader/net/TCP.cpp index 978621e26f..64390faedc 100644 --- a/src/system/boot/loader/net/TCP.cpp +++ b/src/system/boot/loader/net/TCP.cpp @@ -218,8 +218,10 @@ TCPSocket::Connect(ip_addr_t address, uint16 port) return B_NO_MEMORY; error = packet->SetTo(NULL, 0, fAddress, fPort, address, port, fSequenceNumber, fAcknowledgeNumber, TCP_SYN); - if (error != B_OK) + if (error != B_OK) { + delete packet; return error; + } error = _Send(packet); if (error != B_OK) return error; @@ -248,8 +250,10 @@ TCPSocket::Close() return B_NO_MEMORY; status_t error = packet->SetTo(NULL, 0, fAddress, fPort, fRemoteAddress, fRemotePort, fSequenceNumber, fAcknowledgeNumber, TCP_FIN | TCP_ACK); - if (error != B_OK) + if (error != B_OK) { + delete packet; return error; + } error = _Send(packet); if (error != B_OK) return error; @@ -354,8 +358,10 @@ TCPSocket::Write(const void* buffer, size_t bufferSize) status_t error = packet->SetTo(buffer, bufferSize, fAddress, fPort, fRemoteAddress, fRemotePort, fSequenceNumber, fAcknowledgeNumber, TCP_ACK); - if (error != B_OK) + if (error != B_OK) { + delete packet; return error; + } return _Send(packet); } @@ -589,9 +595,12 @@ TCPSocket::_Ack() return B_NO_MEMORY; status_t error = packet->SetTo(NULL, 0, fAddress, fPort, fRemoteAddress, fRemotePort, fSequenceNumber, fAcknowledgeNumber, TCP_ACK); - if (error != B_OK) + if (error != B_OK) { + delete packet; return error; + } error = _Send(packet, false); + delete packet; if (error != B_OK) return error; return B_OK;