From 7108ab1ff9fe5758a12842c2c8dc8f541c57ffbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Thu, 14 Jan 2010 16:35:41 +0000 Subject: [PATCH] * copy_meta_data() also copied the size of the buffer, which wasn't such a good idea. Splitting large buffers no longer causes KDL. * merge_buffer() now maintains the size of the source buffer while removing its nodes. * The paranoia checks run through again now. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35073 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/kernel/network/stack/net_buffer.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/add-ons/kernel/network/stack/net_buffer.cpp b/src/add-ons/kernel/network/stack/net_buffer.cpp index 5fd3d9c5c8..e2ff00c537 100644 --- a/src/add-ons/kernel/network/stack/net_buffer.cpp +++ b/src/add-ons/kernel/network/stack/net_buffer.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2006-2009, Haiku, Inc. All Rights Reserved. + * Copyright 2006-2010, Haiku, Inc. All Rights Reserved. * Distributed under the terms of the MIT License. * * Authors: @@ -7,6 +7,7 @@ * Ingo Weinhold, ingo_weinhold@gmx.de */ + #include "utility.h" #include @@ -1028,7 +1029,6 @@ copy_metadata(net_buffer* destination, const net_buffer* source) destination->flags = source->flags; destination->interface = source->interface; destination->offset = source->offset; - destination->size = source->size; destination->protocol = source->protocol; destination->type = source->type; } @@ -1151,6 +1151,7 @@ duplicate_buffer(net_buffer* _buffer) copy_metadata(duplicate, buffer); + ASSERT(duplicate->size == buffer->size); CHECK_BUFFER(buffer); CHECK_BUFFER(duplicate); RUN_PARANOIA_CHECKS(duplicate); @@ -1189,6 +1190,7 @@ clone_buffer(net_buffer* _buffer, bool shareFreeSpace) } copy_metadata(clone, buffer); + ASSERT(clone->size == buffer->size); return clone; @@ -1259,6 +1261,7 @@ clone_buffer(net_buffer* _buffer, bool shareFreeSpace) copy_metadata(clone, buffer); + ASSERT(clone->size == buffer->size); CREATE_PARANOIA_CHECK_SET(clone, "net_buffer"); SET_PARANOIA_CHECK(PARANOIA_SUSPICIOUS, clone, &clone->size, sizeof(clone->size)); @@ -1363,6 +1366,7 @@ merge_buffer(net_buffer* _buffer, net_buffer* _with, bool after) // The node is already in the buffer, we can just move it // over to the new owner list_remove_item(&with->buffers, node); + with->size -= node->used; } else { // we need a new place for this node data_node* newNode = add_data_node(buffer, node->header);