* The check to remove bytes at the beginning happened twice.
* There was an off-by-one error that could well be responsible for bug #2594. Haven't tested it yet, though. * Added an extra assert to make sure that "next" is set correctly. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28937 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -90,8 +90,7 @@ BufferQueue::Add(net_buffer *buffer, tcp_sequence sequence)
|
||||
return;
|
||||
}
|
||||
if (sequence < fFirstSequence) {
|
||||
// Remove the stuff we already have
|
||||
|
||||
// this buffer contains data that is already long gone - trim it
|
||||
gBufferModule->remove_header(buffer, fFirstSequence - sequence);
|
||||
sequence = fFirstSequence;
|
||||
}
|
||||
@@ -121,12 +120,6 @@ BufferQueue::Add(net_buffer *buffer, tcp_sequence sequence)
|
||||
if (fLastSequence < sequence + buffer->size)
|
||||
fLastSequence = sequence + buffer->size;
|
||||
|
||||
if (fFirstSequence > sequence) {
|
||||
// this buffer contains data that is already long gone - trim it
|
||||
gBufferModule->remove_header(buffer, fFirstSequence - sequence);
|
||||
sequence = fFirstSequence;
|
||||
}
|
||||
|
||||
// find the place where to insert the buffer into the queue
|
||||
|
||||
SegmentList::ReverseIterator iterator = fList.GetReverseIterator();
|
||||
@@ -156,7 +149,7 @@ BufferQueue::Add(net_buffer *buffer, tcp_sequence sequence)
|
||||
gBufferModule->free(previous);
|
||||
}
|
||||
} else if (tcp_sequence(previous->sequence + previous->size)
|
||||
> sequence + buffer->size) {
|
||||
>= sequence + buffer->size) {
|
||||
// We already know this data
|
||||
gBufferModule->free(buffer);
|
||||
buffer = NULL;
|
||||
@@ -169,6 +162,9 @@ BufferQueue::Add(net_buffer *buffer, tcp_sequence sequence)
|
||||
}
|
||||
}
|
||||
|
||||
// "next" always starts after the buffer sequence
|
||||
ASSERT(next == NULL || buffer == NULL || next->sequence > sequence);
|
||||
|
||||
while (buffer != NULL && next != NULL
|
||||
&& tcp_sequence(sequence + buffer->size) > next->sequence) {
|
||||
// we already have at least part of this data
|
||||
|
||||
Reference in New Issue
Block a user