From 4062fe7ce3a21b929e01e422f00d4d28bede8618 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Mon, 15 Jan 2007 16:10:13 +0000 Subject: [PATCH] fReceiveNext was not maintained correctly in case of out of order packets. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19813 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.cpp b/src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.cpp index c2dc145358..721a06ef99 100644 --- a/src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.cpp +++ b/src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.cpp @@ -964,10 +964,9 @@ TRACE(("peer is finishing connection!")); // put it in the receive buffer if (buffer->size > 0) { - if (fReceiveNext == segment.sequence) - fReceiveNext += buffer->size; -TRACE(("adding data, receive next = %lu!\n", (uint32)fReceiveNext)); fReceiveQueue.Add(buffer, segment.sequence); + fReceiveNext = fReceiveQueue.NextSequence(); +TRACE(("adding data, receive next = %lu!\n", (uint32)fReceiveNext)); release_sem_etc(fReceiveLock, 1, B_DO_NOT_RESCHEDULE); // TODO: real conditional locking needed!