Fix deadlock in storage cache
Former-commit-id: e74711e8131cd29a1e0294fbb28e1737ee98afce
This commit is contained in:
parent
df19692fd8
commit
bdc29a935e
@ -130,9 +130,10 @@ void StorageCache::retrieve(sds key, IStorage::callbackSingle fn) const
|
|||||||
|
|
||||||
size_t StorageCache::count() const
|
size_t StorageCache::count() const
|
||||||
{
|
{
|
||||||
std::unique_lock<fastlock> ul(m_lock);
|
std::unique_lock<fastlock> ul(m_lock, std::defer_lock);
|
||||||
|
bool fLocked = ul.try_lock();
|
||||||
size_t count = m_spstorage->count();
|
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));
|
serverAssert(bulkInsertsInProgress.load(std::memory_order_seq_cst) || count == (dictSize(m_pdict) + m_collisionCount));
|
||||||
}
|
}
|
||||||
return count;
|
return count;
|
||||||
@ -140,6 +141,5 @@ size_t StorageCache::count() const
|
|||||||
|
|
||||||
void StorageCache::beginWriteBatch() {
|
void StorageCache::beginWriteBatch() {
|
||||||
serverAssert(GlobalLocksAcquired()); // Otherwise we deadlock
|
serverAssert(GlobalLocksAcquired()); // Otherwise we deadlock
|
||||||
m_lock.lock();
|
|
||||||
m_spstorage->beginWriteBatch();
|
m_spstorage->beginWriteBatch();
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user