X-Git-Url: http://plrg.eecs.uci.edu/git/?p=junction.git;a=blobdiff_plain;f=junction%2FConcurrentMap_Grampa.h;h=dc4749cb60128095b9f508b1c3d07681dec9ea54;hp=8422b2261a278855a214f6595dfb02c1dcad777f;hb=fdaa2b5b2a5c1d2e40a7b8ffb1616933c9feda6d;hpb=14f74b75cedcd90e8fb735d6c6845f9f4c022785 diff --git a/junction/ConcurrentMap_Grampa.h b/junction/ConcurrentMap_Grampa.h index 8422b22..dc4749c 100644 --- a/junction/ConcurrentMap_Grampa.h +++ b/junction/ConcurrentMap_Grampa.h @@ -280,9 +280,12 @@ public: m_cell = Details::find(hash, m_table, m_sizeMask); if (!m_cell) return; - m_value = m_cell->value.load(turf::Consume); - if (m_value != Value(ValueTraits::Redirect)) - return; // Found an existing value + Value value = m_cell->value.load(turf::Consume); + if (value != Value(ValueTraits::Redirect)) { + // Found an existing value + m_value = value; + return; + } // We've encountered a Redirect value. Help finish the migration. TURF_TRACE(ConcurrentMap_Grampa, 11, "[Mutator] find was redirected", uptr(m_table), 0); m_table->jobCoordinator.participate(); @@ -307,13 +310,15 @@ public: } case Details::InsertResult_AlreadyFound: { // The hash was already found in the table. - m_value = m_cell->value.load(turf::Consume); - if (m_value == Value(ValueTraits::Redirect)) { + Value value = m_cell->value.load(turf::Consume); + if (value == Value(ValueTraits::Redirect)) { // We've encountered a Redirect value. TURF_TRACE(ConcurrentMap_Grampa, 13, "[Mutator] insertOrFind was redirected", uptr(m_table), uptr(m_value)); break; // Help finish the migration. } - return; // Found an existing value + // Found an existing value + m_value = value; + return; } case Details::InsertResult_Overflow: { Details::beginTableMigration(m_map, m_table, overflowIdx);