From 4e609863b6a3a6b10a2cd42ab5b2c1383b47c142 Mon Sep 17 00:00:00 2001 From: John Sully Date: Wed, 10 Jun 2020 12:48:16 -0400 Subject: [PATCH] Fix failure to find expire during rehash Former-commit-id: b66269865cb71a5e1dd33588b012206da2765824 --- src/semiorderedset.h | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/semiorderedset.h b/src/semiorderedset.h index 35d27bedb..1b79e725b 100644 --- a/src/semiorderedset.h +++ b/src/semiorderedset.h @@ -92,15 +92,16 @@ public: for (int hashset = 0; hashset < 2; ++hashset) // rehashing may only be 1 resize behind, so we check up to two slots { - if (m_data[itr.idxPrimary] == nullptr) - continue; - const auto &vecBucket = *m_data[itr.idxPrimary]; - - auto itrFind = std::find(vecBucket.begin(), vecBucket.end(), key); - if (itrFind != vecBucket.end()) + if (m_data[itr.idxPrimary] != nullptr) { - itr.idxSecondary = itrFind - vecBucket.begin(); - return itr; + const auto &vecBucket = *m_data[itr.idxPrimary]; + + auto itrFind = std::find(vecBucket.begin(), vecBucket.end(), key); + if (itrFind != vecBucket.end()) + { + itr.idxSecondary = itrFind - vecBucket.begin(); + return itr; + } } // See if we have to check the older slot @@ -333,7 +334,8 @@ private: { if (m_data[idxRehash] == nullptr) continue; - CowPtr spvecT = std::make_shared(); + + CowPtr spvecT; std::swap(m_data[idxRehash], spvecT); for (const auto &v : *spvecT)