diff options
author | Thierry Crozat | 2018-07-30 19:18:52 +0100 |
---|---|---|
committer | Thierry Crozat | 2018-07-30 19:32:02 +0100 |
commit | 53d0fe22d902efa196ae1da03245d56f543c0ae2 (patch) | |
tree | 1d30e5c3d658c5b2e55ba7985551cb3c9f516ea2 | |
parent | cb6d3b575c02782811fe01f213ca819984c87ab6 (diff) | |
download | scummvm-rg350-53d0fe22d902efa196ae1da03245d56f543c0ae2.tar.gz scummvm-rg350-53d0fe22d902efa196ae1da03245d56f543c0ae2.tar.bz2 scummvm-rg350-53d0fe22d902efa196ae1da03245d56f543c0ae2.zip |
COMMON: Fix HashMap never reusing erased items storage
When erasing and inserting many items this caused the hashmap capacity
to grow more than it should which resulted in performances issues (and
possibly memory issues as well). The issue was reported on IRC today
with the wintermute engine.
-rw-r--r-- | common/hashmap.h | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/common/hashmap.h b/common/hashmap.h index 1f93b68455..7913d8fc8b 100644 --- a/common/hashmap.h +++ b/common/hashmap.h @@ -507,7 +507,7 @@ typename HashMap<Key, Val, HashFunc, EqualFunc>::size_type HashMap<Key, Val, Has #ifdef DEBUG_HASH_COLLISIONS _dummyHits++; #endif - if (first_free != _mask + 1) + if (first_free == NONE_FOUND) first_free = ctr; } else if (_equal(_storage[ctr]->_key, key)) { found = true; @@ -528,7 +528,7 @@ typename HashMap<Key, Val, HashFunc, EqualFunc>::size_type HashMap<Key, Val, Has (const void *)this, _mask + 1, _size); #endif - if (!found && first_free != _mask + 1) + if (!found && first_free != NONE_FOUND) ctr = first_free; if (!found) { |