Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorJacques Lucke <jacques@blender.org>2022-02-02 15:12:12 +0300
committerJacques Lucke <jacques@blender.org>2022-02-02 15:12:12 +0300
commite54fba5591a95238b7106b6e1fba6164c69dd622 (patch)
treea9b7cb9eb56ec107466d57223c6f2659fa82599f /source
parent4dcaac6d33026759faad186542b6cfae0d87e4e9 (diff)
parentbf8597febe2020e654020ad60e8af35c635c1a9a (diff)
Merge branch 'blender-v3.1-release'
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenlib/BLI_vector_set.hh4
-rw-r--r--source/blender/blenlib/tests/BLI_vector_set_test.cc10
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