[Bf-blender-cvs] [bf8597febe2] blender-v3.1-release: BLI: fix memory leak in VectorSet
Jacques Lucke
noreply at git.blender.org
Wed Feb 2 13:11:42 CET 2022
Commit: bf8597febe2020e654020ad60e8af35c635c1a9a
Author: Jacques Lucke
Date: Wed Feb 2 13:11:33 2022 +0100
Branches: blender-v3.1-release
https://developer.blender.org/rBbf8597febe2020e654020ad60e8af35c635c1a9a
BLI: fix memory leak in VectorSet
The leak happened when the vector set had to grow when it
was empty but it had allocated the keys array already.
===================================================================
M source/blender/blenlib/BLI_vector_set.hh
M source/blender/blenlib/tests/BLI_vector_set_test.cc
===================================================================
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
More information about the Bf-blender-cvs
mailing list