[haiku-commits] r38503 - haiku/trunk/src/system/boot/loader/net

  • From: andreas.faerber@xxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Wed, 1 Sep 2010 20:19:57 +0200 (CEST)

Author: andreasf
Date: 2010-09-01 20:19:57 +0200 (Wed, 01 Sep 2010)
New Revision: 38503
Changeset: http://dev.haiku-os.org/changeset/38503

Modified:
   haiku/trunk/src/system/boot/loader/net/TCP.cpp
Log:
boot_net: Fix TCP memory leaks

In some error conditions the packet would have been leaked.


Modified: haiku/trunk/src/system/boot/loader/net/TCP.cpp
===================================================================
--- haiku/trunk/src/system/boot/loader/net/TCP.cpp      2010-09-01 17:57:18 UTC 
(rev 38502)
+++ haiku/trunk/src/system/boot/loader/net/TCP.cpp      2010-09-01 18:19:57 UTC 
(rev 38503)
@@ -218,8 +218,10 @@
                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 @@
                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 @@
        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 @@
                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;


Other related posts:

  • » [haiku-commits] r38503 - haiku/trunk/src/system/boot/loader/net - andreas . faerber