From bdc29a935e886c92a05208cb47800c99af7b83fe Mon Sep 17 00:00:00 2001 From: John Sully Date: Mon, 14 Jun 2021 06:32:58 +0000 Subject: [PATCH] Fix deadlock in storage cache Former-commit-id: e74711e8131cd29a1e0294fbb28e1737ee98afce --- src/StorageCache.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/StorageCache.cpp b/src/StorageCache.cpp index e33c97ff7..98c797c71 100644 --- a/src/StorageCache.cpp +++ b/src/StorageCache.cpp @@ -130,9 +130,10 @@ void StorageCache::retrieve(sds key, IStorage::callbackSingle fn) const size_t StorageCache::count() const { - std::unique_lock ul(m_lock); + std::unique_lock ul(m_lock, std::defer_lock); + bool fLocked = ul.try_lock(); size_t count = m_spstorage->count(); - if (m_pdict != nullptr) { + if (m_pdict != nullptr && fLocked) { serverAssert(bulkInsertsInProgress.load(std::memory_order_seq_cst) || count == (dictSize(m_pdict) + m_collisionCount)); } return count; @@ -140,6 +141,5 @@ size_t StorageCache::count() const void StorageCache::beginWriteBatch() { serverAssert(GlobalLocksAcquired()); // Otherwise we deadlock - m_lock.lock(); m_spstorage->beginWriteBatch(); } \ No newline at end of file