This is an automated email from the ASF dual-hosted git repository.
guangmingchen 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 ad077048 Fix infinite loop in flatmap resizing when bucket count is a
power of two (#3071)
ad077048 is described below
commit ad0770483814cb8a79b14435e7c637bba4848927
Author: Chen Chuanle <[email protected]>
AuthorDate: Mon Aug 25 17:09:08 2025 +0800
Fix infinite loop in flatmap resizing when bucket count is a power of two
(#3071)
---
src/butil/containers/flat_map_inl.h | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/src/butil/containers/flat_map_inl.h
b/src/butil/containers/flat_map_inl.h
index 13444b2e..93bcbf9d 100644
--- a/src/butil/containers/flat_map_inl.h
+++ b/src/butil/containers/flat_map_inl.h
@@ -714,8 +714,13 @@ template <typename _K, typename _T, typename _H, typename
_E,
optional<typename FlatMap<_K, _T, _H, _E, _S, _A, _M>::NewBucketsInfo>
FlatMap<_K, _T, _H, _E, _S, _A, _M>::new_buckets_and_thumbnail(size_t size,
size_t
new_nbucket) {
+ size_t bump = 0;
do {
- new_nbucket = flatmap_round(new_nbucket);
+ // The first iteration uses 'new_nbucket + 0' ensures that when
new_nbucket is a power
+ // of 2 and is already sufficient to accommodate `size`, it does not
need to be doubled.
+ // Subsequent use of 'new_nbucket + 1' avoids an infinite loop.
+ new_nbucket = flatmap_round(new_nbucket + bump);
+ bump = 1;
} while (is_too_crowded(size, new_nbucket, _load_factor));
if (_nbucket == new_nbucket) {
return nullopt;
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]