diff --git a/src/db.cpp b/src/db.cpp index b60462c09..b1aa2bad3 100644 --- a/src/db.cpp +++ b/src/db.cpp @@ -2588,6 +2588,7 @@ void redisDbPersistentData::ensure(const char *sdsKey, dictEntry **pde) { serverAssert(sdsKey != nullptr); serverAssert(FImplies(*pde != nullptr, dictGetVal(*pde) != nullptr)); // early versions set a NULL object, this is no longer valid + serverAssert(m_refCount == 0); std::unique_lock ul(g_expireLock); // First see if the key can be obtained from a snapshot @@ -2781,7 +2782,7 @@ redisDbPersistentData::~redisDbPersistentData() if (m_spdbSnapshotHOLDER != nullptr) endSnapshot(m_spdbSnapshotHOLDER.get()); - //serverAssert(m_pdbSnapshot == nullptr); + serverAssert(m_pdbSnapshot == nullptr); serverAssert(m_refCount == 0); //serverAssert(m_pdict->iterators == 0); serverAssert(m_pdictTombstone == nullptr || m_pdictTombstone->iterators == 0); diff --git a/src/snapshot.cpp b/src/snapshot.cpp index 581e2f648..5a40cfcbb 100644 --- a/src/snapshot.cpp +++ b/src/snapshot.cpp @@ -161,7 +161,7 @@ void redisDbPersistentData::recursiveFreeSnapshots(redisDbPersistentDataSnapshot //psnapshot->m_pdict->iterators--; psnapshot->m_spdbSnapshotHOLDER.release(); - //psnapshot->m_pdbSnapshot = nullptr; + psnapshot->m_pdbSnapshot = nullptr; g_pserver->garbageCollector.enqueue(serverTL->gcEpoch, std::unique_ptr(psnapshot)); serverLog(LL_VERBOSE, "Garbage collected snapshot"); } @@ -427,12 +427,12 @@ void redisDbPersistentData::endSnapshot(const redisDbPersistentDataSnapshot *psn if (m_pdbSnapshot != nullptr && m_spdbSnapshotHOLDER->m_pdbSnapshot != nullptr) { m_pdbSnapshot = m_spdbSnapshotHOLDER->m_pdbSnapshot; - m_spdbSnapshotHOLDER->m_pdbSnapshot = nullptr; } else { m_pdbSnapshot = nullptr; } + m_spdbSnapshotHOLDER->m_pdbSnapshot = nullptr; // Fixup the about to free'd snapshots iterator count so the dtor doesn't complain if (m_refCount)