From d151088a94e5929bce4ef17cebb8ff5fae596d9c Mon Sep 17 00:00:00 2001 From: Jan Steemann Date: Mon, 13 Oct 2014 14:24:29 +0200 Subject: [PATCH] fixed invariant --- arangod/HashIndex/hash-array-multi.cpp | 9 +++++++-- arangod/HashIndex/hash-array.cpp | 3 ++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/arangod/HashIndex/hash-array-multi.cpp b/arangod/HashIndex/hash-array-multi.cpp index a30fc4489e..f7b52bca6a 100644 --- a/arangod/HashIndex/hash-array-multi.cpp +++ b/arangod/HashIndex/hash-array-multi.cpp @@ -564,10 +564,12 @@ int TRI_InsertElementHashArrayMulti (TRI_hash_array_multi_t* array, TRI_ASSERT(arrayElement->_next == nullptr); - // not found in list, now insert insert + // not found in list, now insert element->_next = nullptr; *arrayElement = *element; array->_nrUsed++; + + TRI_ASSERT(arrayElement->_next == nullptr); return TRI_ERROR_NO_ERROR; } @@ -618,6 +620,7 @@ int TRI_RemoveElementHashArrayMulti (TRI_hash_array_multi_t* array, } // the element itself is the document to remove + if (arrayElement->_next != nullptr) { auto next = arrayElement->_next; @@ -648,7 +651,9 @@ int TRI_RemoveElementHashArrayMulti (TRI_hash_array_multi_t* array, if ((i < k && ! (i < j && j <= k)) || (k < i && ! (i < j || j <= k))) { array->_table[i] = array->_table[k]; - array->_table[k]._document = nullptr; + array->_table[k]._document = nullptr; + array->_table[k]._next = nullptr; + array->_table[k]._subObjects = nullptr; i = k; } diff --git a/arangod/HashIndex/hash-array.cpp b/arangod/HashIndex/hash-array.cpp index 0434d31f23..f25796e284 100644 --- a/arangod/HashIndex/hash-array.cpp +++ b/arangod/HashIndex/hash-array.cpp @@ -489,7 +489,8 @@ int TRI_RemoveElementHashArray (TRI_hash_array_t* array, if ((i < k && ! (i < j && j <= k)) || (k < i && ! (i < j || j <= k))) { array->_table[i] = array->_table[k]; - array->_table[k]._document = nullptr; + array->_table[k]._document = nullptr; + array->_table[k]._subObjects = nullptr; i = k; }