summaryrefslogtreecommitdiffstats
path: root/storage
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2023-08-22 21:24:34 +0200
committerGitHub <noreply@github.com>2023-08-22 21:24:34 +0200
commita0f241bf212bdaf7f56f7d1199d89955c4aef2e5 (patch)
treed9b149118f1fd95f78fb718195ec876468d3012e /storage
parent1c7237f9f4f5878ca6882b375bcaf130030e7caa (diff)
Revert "Move condition variable notifications inside critical sections"
Diffstat (limited to 'storage')
-rw-r--r--storage/src/vespa/storage/persistence/filestorage/filestorhandlerimpl.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/storage/src/vespa/storage/persistence/filestorage/filestorhandlerimpl.cpp b/storage/src/vespa/storage/persistence/filestorage/filestorhandlerimpl.cpp
index 808f19be3e5..33022c65e24 100644
--- a/storage/src/vespa/storage/persistence/filestorage/filestorhandlerimpl.cpp
+++ b/storage/src/vespa/storage/persistence/filestorage/filestorhandlerimpl.cpp
@@ -1040,8 +1040,8 @@ FileStorHandlerImpl::Stripe::getMessage(monitor_guard & guard, PriorityIdx & idx
return {std::move(locker), std::move(msg), std::move(throttle_token)};
} else {
std::shared_ptr<api::StorageReply> msgReply(makeQueueTimeoutReply(*msg));
- _cond->notify_all();
guard.unlock();
+ _cond->notify_all();
_messageSender.sendReply(msgReply);
return {};
}
@@ -1113,6 +1113,9 @@ FileStorHandlerImpl::Stripe::schedule_and_get_next_async_message(MessageEntry en
update_cached_queue_size(guard);
auto lockedMessage = get_next_async_message(guard);
if ( ! lockedMessage.msg) {
+ if (guard.owns_lock()) {
+ guard.unlock();
+ }
_cond->notify_one();
}
return lockedMessage;
@@ -1182,6 +1185,7 @@ FileStorHandlerImpl::Stripe::release(const document::Bucket & bucket,
_lockedBuckets.erase(iter); // No more locks held
}
bool emptySharedLocks = entry._sharedLocks.empty();
+ guard.unlock();
if (wasExclusive) {
_cond->notify_all();
} else if (emptySharedLocks) {
@@ -1197,6 +1201,7 @@ FileStorHandlerImpl::Stripe::decrease_active_sync_merges_counter() noexcept
const bool may_have_blocked_merge = (_active_merges == _owner._max_active_merges_per_stripe);
--_active_merges;
if (may_have_blocked_merge) {
+ guard.unlock();
_cond->notify_all();
}
}