From 518720875d78035411e475824ab64c5da1c9c012 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Sun, 11 Jan 2009 16:41:08 +0000 Subject: [PATCH] * Fixed a few more problems that the test application revealed. This should also close #2594. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28883 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../kernel/network/protocols/tcp/BufferQueue.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/add-ons/kernel/network/protocols/tcp/BufferQueue.cpp b/src/add-ons/kernel/network/protocols/tcp/BufferQueue.cpp index bdeb657fd7..8e6df5f66e 100644 --- a/src/add-ons/kernel/network/protocols/tcp/BufferQueue.cpp +++ b/src/add-ons/kernel/network/protocols/tcp/BufferQueue.cpp @@ -83,11 +83,18 @@ BufferQueue::Add(net_buffer *buffer, tcp_sequence sequence) fContiguousBytes)); VERIFY(); - if (tcp_sequence(sequence + buffer->size) <= fFirstSequence) { + if (tcp_sequence(sequence + buffer->size) <= fFirstSequence + || buffer->size == 0) { // This buffer does not contain any data of interest gBufferModule->free(buffer); return; } + if (sequence < fFirstSequence) { + // Remove the stuff we already have + + gBufferModule->remove_header(buffer, fFirstSequence - sequence); + sequence = fFirstSequence; + } if (fList.IsEmpty() || sequence >= fLastSequence) { // we usually just add the buffer to the end of the queue @@ -166,7 +173,7 @@ BufferQueue::Add(net_buffer *buffer, tcp_sequence sequence) && tcp_sequence(sequence + buffer->size) > next->sequence) { // we already have at least part of this data if (tcp_sequence(next->sequence + next->size) - < sequence + buffer->size) { + <= sequence + buffer->size) { net_buffer *remove = next; next = (net_buffer *)next->link.next; @@ -469,7 +476,7 @@ BufferQueue::Dump() const SegmentList::ConstIterator iterator = fList.GetIterator(); int32 number = 0; while (net_buffer* buffer = iterator.Next()) { - kprintf(" %ld. buffer %p, sequence %lx, size %lu\n", ++number, + kprintf(" %ld. buffer %p, sequence %lu, size %lu\n", ++number, buffer, buffer->sequence, buffer->size); } }