This is an automated email from the ASF dual-hosted git repository.

jamesge pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-brpc.git


The following commit(s) were added to refs/heads/master by this push:
     new 51bf10c2 fix issues in FlatMap
51bf10c2 is described below

commit 51bf10c214411cd490b6537659b24d91c50357fc
Author: gejun.0 <geju...@bytedance.com>
AuthorDate: Thu Sep 29 18:49:25 2022 +0800

    fix issues in FlatMap
---
 src/butil/containers/flat_map_inl.h | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/src/butil/containers/flat_map_inl.h 
b/src/butil/containers/flat_map_inl.h
index e5948920..ad5598c2 100644
--- a/src/butil/containers/flat_map_inl.h
+++ b/src/butil/containers/flat_map_inl.h
@@ -567,10 +567,12 @@ void FlatMap<_K, _T, _H, _E, _S>::save_iterator(
 template <typename _K, typename _T, typename _H, typename _E, bool _S>
 typename FlatMap<_K, _T, _H, _E, _S>::const_iterator
 FlatMap<_K, _T, _H, _E, _S>::restore_iterator(const PositionHint& hint) const {
-    if (hint.nbucket != _nbucket/*resized*/ ||
-        hint.offset >= _nbucket/*invalid hint*/) {
-        return begin();  // restart
-    }
+    if (hint.nbucket != _nbucket)  // resized
+        return begin(); // restart
+
+    if (hint.offset >= _nbucket) // invalid hint, stop the iteration
+        return end();
+
     Bucket& first_node = _buckets[hint.offset];
     if (hint.at_entry) {
         return const_iterator(this, hint.offset);
@@ -604,6 +606,10 @@ bool FlatMap<_K, _T, _H, _E, _S>::resize(size_t nbucket2) {
     }
 
     FlatMap new_map;
+    // NOTE: following functors must be kept after resizing otherwise the 
+    // internal state is lost.
+    new_map._hashfn = _hashfn; 
+    new_map._eql = _eql;
     if (new_map.init(nbucket2, _load_factor) != 0) {
         LOG(ERROR) << "Fail to init new_map, nbucket=" << nbucket2;
         return false;


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@brpc.apache.org
For additional commands, e-mail: dev-h...@brpc.apache.org

Reply via email to