This is an automated email from the ASF dual-hosted git repository.
chenBright pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/brpc.git
The following commit(s) were added to refs/heads/master by this push:
new d1c3f7cc Fix sparse FlatMap swap thumbnail reset (#3619)
d1c3f7cc is described below
commit d1c3f7cc1c3546c04f472d675c92190e93055521
Author: nkysg <[email protected]>
AuthorDate: Sun Oct 18 10:47:27 2026 +0800
Fix sparse FlatMap swap thumbnail reset (#3619)
---
src/butil/containers/flat_map_inl.h | 2 +-
test/flat_map_unittest.cpp | 27 +++++++++++++++++++++++++++
2 files changed, 28 insertions(+), 1 deletion(-)
diff --git a/src/butil/containers/flat_map_inl.h
b/src/butil/containers/flat_map_inl.h
index 0319fd78..6c280810 100644
--- a/src/butil/containers/flat_map_inl.h
+++ b/src/butil/containers/flat_map_inl.h
@@ -352,7 +352,7 @@ void FlatMap<_K, _T, _H, _E, _S, _A, _M>::swap(
_buckets = rhs._buckets;
_thumbnail = rhs._thumbnail;
rhs._buckets = rhs._default_buckets;
- rhs._thumbnail = rhs._thumbnail;
+ rhs._thumbnail = rhs._default_thumbnail;
} // else both are default buckets which has been swapped, so no need
to swap `_buckets'.
}
diff --git a/test/flat_map_unittest.cpp b/test/flat_map_unittest.cpp
index 45702149..43b7e7eb 100644
--- a/test/flat_map_unittest.cpp
+++ b/test/flat_map_unittest.cpp
@@ -1637,4 +1637,31 @@ TEST_F(FlatMapTest, multi) {
ASSERT_NE(nullptr, value);
ASSERT_EQ(std::vector<char>(64, 'b'), *value);
}
+
+TEST_F(FlatMapTest, sparse_swap_default_and_dynamic) {
+ butil::SparseFlatMap<int, int> default_map;
+ butil::SparseFlatMap<int, int> dynamic_map;
+ ASSERT_EQ(0, dynamic_map.init(32));
+ dynamic_map[1] = 1;
+
+ default_map.swap(dynamic_map);
+ dynamic_map[2] = 2;
+ dynamic_map.clear();
+
+ ASSERT_NE(default_map.begin(), default_map.end());
+ ASSERT_EQ(1, *default_map.seek(1));
+}
+
+TEST_F(FlatMapTest, sparse_swap_does_not_leave_dangling_thumbnail) {
+ butil::SparseFlatMap<int, int> dynamic_map;
+ ASSERT_EQ(0, dynamic_map.init(32));
+ dynamic_map[1] = 1;
+ {
+ butil::SparseFlatMap<int, int> default_map;
+ default_map.swap(dynamic_map);
+ }
+
+ dynamic_map[2] = 2;
+ ASSERT_EQ(2, *dynamic_map.seek(2));
+}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]