summaryrefslogtreecommitdiffstats
path: root/storage
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2023-01-12 21:25:41 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2023-01-12 21:25:41 +0000
commitc157618a91a7a8e5ce5cebaeedf6e186918ca73d (patch)
treeaff9731845e50f3fdf8f52f0f0cf4f8eb9cd9ea7 /storage
parent3807c33ce945cf6a0f87977970a834d9109c6792 (diff)
Drop the lock before notifying
Diffstat (limited to 'storage')
-rw-r--r--storage/src/vespa/storage/persistence/filestorage/filestorhandlerimpl.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/storage/src/vespa/storage/persistence/filestorage/filestorhandlerimpl.cpp b/storage/src/vespa/storage/persistence/filestorage/filestorhandlerimpl.cpp
index 402beef0f11..967f6b6e195 100644
--- a/storage/src/vespa/storage/persistence/filestorage/filestorhandlerimpl.cpp
+++ b/storage/src/vespa/storage/persistence/filestorage/filestorhandlerimpl.cpp
@@ -1101,9 +1101,11 @@ FileStorHandlerImpl::Stripe::abort(std::vector<std::shared_ptr<api::StorageReply
bool
FileStorHandlerImpl::Stripe::schedule(MessageEntry messageEntry)
{
- std::lock_guard guard(*_lock);
- _queue->emplace_back(std::move(messageEntry));
- update_cached_queue_size(guard);
+ {
+ std::lock_guard guard(*_lock);
+ _queue->emplace_back(std::move(messageEntry));
+ update_cached_queue_size(guard);
+ }
_cond->notify_one();
return true;
}
@@ -1116,6 +1118,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;