diff --git a/headers/private/kernel/util/MultiHashTable.h b/headers/private/kernel/util/MultiHashTable.h index bad16dadf1..85ddbd73fe 100644 --- a/headers/private/kernel/util/MultiHashTable.h +++ b/headers/private/kernel/util/MultiHashTable.h @@ -75,8 +75,7 @@ public: : fOriginalIndex(index), fOriginalValue(value) { Iterator::fTable = table; - Iterator::fIndex = index; - Iterator::fNext = value; + Rewind(); } bool HasNext() const @@ -91,7 +90,7 @@ public: void Rewind() { - Iterator::fIndex = fOriginalIndex; + Iterator::fIndex = fOriginalIndex + 1; Iterator::fNext = fOriginalValue; } diff --git a/headers/private/kernel/util/OpenHashTable.h b/headers/private/kernel/util/OpenHashTable.h index 3715e42a0f..d378868ac0 100644 --- a/headers/private/kernel/util/OpenHashTable.h +++ b/headers/private/kernel/util/OpenHashTable.h @@ -114,16 +114,8 @@ public: void InsertUnchecked(ValueType *value) { - if (CheckDuplicates) { - for (size_t i = 0; i < fTableSize; i++) { - ValueType *bucket = fTable[i]; - while (bucket) { - if (bucket == value) - panic("Hash Table: value already in table."); - bucket = _Link(bucket)->fNext; - } - } - } + if (CheckDuplicates && _ExaustiveSearch(value)) + panic("Hash Table: value already in table."); _Insert(fTable, fTableSize, value); fItemCount++; @@ -164,16 +156,8 @@ public: if (slot == NULL) return false; - if (CheckDuplicates) { - for (size_t i = 0; i < fTableSize; i++) { - ValueType *bucket = fTable[i]; - while (bucket) { - if (bucket == value) - panic("Hash Table: duplicate detected."); - bucket = _Link(bucket)->fNext; - } - } - } + if (CheckDuplicates && _ExaustiveSearch(value)) + panic("Hash Table: duplicate detected."); fItemCount--; return true; @@ -270,6 +254,20 @@ protected: return fDefinition.GetLink(bucket); } + bool _ExaustiveSearch(ValueType *value) const + { + for (size_t i = 0; i < fTableSize; i++) { + ValueType *bucket = fTable[i]; + while (bucket) { + if (bucket == value) + return true; + bucket = _Link(bucket)->fNext; + } + } + + return false; + } + Definition fDefinition; size_t fTableSize, fItemCount; ValueType **fTable; diff --git a/src/add-ons/kernel/network/protocols/udp/udp.cpp b/src/add-ons/kernel/network/protocols/udp/udp.cpp index e205794215..bd1e835481 100644 --- a/src/add-ons/kernel/network/protocols/udp/udp.cpp +++ b/src/add-ons/kernel/network/protocols/udp/udp.cpp @@ -933,6 +933,8 @@ UdpEndpoint::StoreData(net_buffer *buffer) status_t UdpEndpoint::DeliverData(net_buffer *_buffer) { + TRACE_EP("DeliverData(%p [%ld bytes])", _buffer, _buffer->size); + net_buffer *buffer = gBufferModule->clone(_buffer, false); if (buffer == NULL) return B_NO_MEMORY;