diff --git a/src/snapshot.cpp b/src/snapshot.cpp index e436a608d..0ad1b5282 100644 --- a/src/snapshot.cpp +++ b/src/snapshot.cpp @@ -238,15 +238,14 @@ void redisDbPersistentDataSnapshot::freeTombstoneObjects(int depth) dictIterator *di = dictGetIterator(m_pdictTombstone); dictEntry *de; - size_t freed = 0; while ((de = dictNext(di)) != nullptr) { dictEntry *deObj = dictFind(m_pdbSnapshot->m_pdict, dictGetKey(de)); if (deObj != nullptr && dictGetVal(deObj) != nullptr) { decrRefCount((robj*)dictGetVal(deObj)); - deObj->v.val = nullptr; - ++freed; + void *ptrSet = nullptr; + __atomic_store(&deObj->v.val, &ptrSet, __ATOMIC_RELAXED); } } dictReleaseIterator(di); @@ -465,7 +464,7 @@ bool redisDbPersistentDataSnapshot::iterate_threadsafe(std::functioniterate_threadsafe([&](const char *key, robj_roptr o) { - if (o != nullptr) { + if (o != nullptr || !m_spstorage) { dictAdd(spdb->m_pdict, sdsdupshared(key), o.unsafe_robjcast()); - incrRefCount(o); + if (o != nullptr) { + incrRefCount(o); + } } else { ++skipped; }