diff options
author | Tor Brede Vekterli <vekterli@yahooinc.com> | 2023-01-13 13:13:28 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-13 13:13:28 +0100 |
commit | 6ea555de57ad11bae44e7f9abca4d2b06d3863ae (patch) | |
tree | 1f6ae291c8b95b443ac38f459c176bcf2340ba37 | |
parent | 45bcd747f2affce11d670f4457678be4b0931aea (diff) | |
parent | 13dc64a8b04e2b8bf2205dc09f0ac8b897a89bcf (diff) |
Merge pull request #25562 from vespa-engine/balder/make-lock-release-thread-safe-again
Move the checks to the safe section.
-rw-r--r-- | storage/src/vespa/storage/persistence/filestorage/filestorhandlerimpl.cpp | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/storage/src/vespa/storage/persistence/filestorage/filestorhandlerimpl.cpp b/storage/src/vespa/storage/persistence/filestorage/filestorhandlerimpl.cpp index f9709479126..12924c3b4f7 100644 --- a/storage/src/vespa/storage/persistence/filestorage/filestorhandlerimpl.cpp +++ b/storage/src/vespa/storage/persistence/filestorage/filestorhandlerimpl.cpp @@ -1162,8 +1162,9 @@ FileStorHandlerImpl::Stripe::release(const document::Bucket & bucket, assert(iter != _lockedBuckets.end()); auto& entry = iter->second; Clock::time_point start_time; + bool wasExclusive = (reqOfReleasedLock == api::LockingRequirements::Exclusive); - if (reqOfReleasedLock == api::LockingRequirements::Exclusive) { + if (wasExclusive) { assert(entry._exclusiveLock); assert(entry._exclusiveLock->msgId == lockMsgId); if (was_active_merge) { @@ -1185,10 +1186,11 @@ FileStorHandlerImpl::Stripe::release(const document::Bucket & bucket, if (!entry._exclusiveLock && entry._sharedLocks.empty()) { _lockedBuckets.erase(iter); // No more locks held } + bool emptySharedLocks = entry._sharedLocks.empty(); guard.unlock(); - if (entry._exclusiveLock) { + if (wasExclusive) { _cond->notify_all(); - } else if (entry._sharedLocks.empty()) { + } else if (emptySharedLocks) { _cond->notify_one(); } } |