diff options
author | Jacques Lucke <jacques@blender.org> | 2022-02-02 15:12:12 +0300 |
---|---|---|
committer | Jacques Lucke <jacques@blender.org> | 2022-02-02 15:12:12 +0300 |
commit | e54fba5591a95238b7106b6e1fba6164c69dd622 (patch) | |
tree | a9b7cb9eb56ec107466d57223c6f2659fa82599f /source/blender/blenlib | |
parent | 4dcaac6d33026759faad186542b6cfae0d87e4e9 (diff) | |
parent | bf8597febe2020e654020ad60e8af35c635c1a9a (diff) |
Merge branch 'blender-v3.1-release'
Diffstat (limited to 'source/blender/blenlib')
-rw-r--r-- | source/blender/blenlib/BLI_vector_set.hh | 4 | ||||
-rw-r--r-- | source/blender/blenlib/tests/BLI_vector_set_test.cc | 10 |
2 files changed, 14 insertions, 0 deletions
diff --git a/source/blender/blenlib/BLI_vector_set.hh b/source/blender/blenlib/BLI_vector_set.hh index 0aac96f93bc..ed744d09314 100644 --- a/source/blender/blenlib/BLI_vector_set.hh +++ b/source/blender/blenlib/BLI_vector_set.hh @@ -570,6 +570,10 @@ class VectorSet { if (this->size() == 0) { try { slots_.reinitialize(total_slots); + if (keys_ != nullptr) { + this->deallocate_keys_array(keys_); + keys_ = nullptr; + } keys_ = this->allocate_keys_array(usable_slots); } catch (...) { diff --git a/source/blender/blenlib/tests/BLI_vector_set_test.cc b/source/blender/blenlib/tests/BLI_vector_set_test.cc index c4016ca75e1..fe3130a846f 100644 --- a/source/blender/blenlib/tests/BLI_vector_set_test.cc +++ b/source/blender/blenlib/tests/BLI_vector_set_test.cc @@ -271,4 +271,14 @@ TEST(vector_set, LookupKey) EXPECT_EQ(set.lookup_key_ptr("a"), set.lookup_key_ptr_as("a")); } +TEST(vector_set, GrowWhenEmpty) +{ + /* Tests that the internal keys array is freed correctly when growing an empty set. */ + VectorSet<int> set; + set.add(4); + set.remove(4); + EXPECT_TRUE(set.is_empty()); + set.reserve(100); +} + } // namespace blender::tests |