summaryrefslogtreecommitdiffstats
path: root/searchcore
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-04-15 07:12:51 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2021-04-15 07:12:51 +0000
commit657873edf0e119be4a9b60dd897737f637f29810 (patch)
tree99317ff7204b7fb2d6050aab2548aa9e98b8d99a /searchcore
parentff8ce02e502c31bb0ffa7ef4236746958ca9b90d (diff)
Use a mutex to allow being called from any thread.
Diffstat (limited to 'searchcore')
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/disk_mem_usage_forwarder.cpp13
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/disk_mem_usage_forwarder.h2
2 files changed, 7 insertions, 8 deletions
diff --git a/searchcore/src/vespa/searchcore/proton/server/disk_mem_usage_forwarder.cpp b/searchcore/src/vespa/searchcore/proton/server/disk_mem_usage_forwarder.cpp
index 39716f93bc6..b75e3455162 100644
--- a/searchcore/src/vespa/searchcore/proton/server/disk_mem_usage_forwarder.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/disk_mem_usage_forwarder.cpp
@@ -2,7 +2,6 @@
#include "disk_mem_usage_forwarder.h"
#include <vespa/vespalib/util/lambdatask.h>
-#include <cassert>
using vespalib::makeLambdaTask;
@@ -14,17 +13,14 @@ DiskMemUsageForwarder::DiskMemUsageForwarder(searchcorespi::index::IThreadServic
_executor(executor),
_listeners(),
_state()
-{
-}
+{ }
-DiskMemUsageForwarder::~DiskMemUsageForwarder()
-{
-}
+DiskMemUsageForwarder::~DiskMemUsageForwarder() = default;
void
DiskMemUsageForwarder::addDiskMemUsageListener(IDiskMemUsageListener *listener)
{
- assert(_executor.isCurrentThread());
+ std::lock_guard guard(_lock);
_listeners.push_back(listener);
listener->notifyDiskMemUsage(_state);
}
@@ -32,7 +28,7 @@ DiskMemUsageForwarder::addDiskMemUsageListener(IDiskMemUsageListener *listener)
void
DiskMemUsageForwarder::removeDiskMemUsageListener(IDiskMemUsageListener *listener)
{
- assert(_executor.isCurrentThread());
+ std::lock_guard guard(_lock);
for (auto itr = _listeners.begin(); itr != _listeners.end(); ++itr) {
if (*itr == listener) {
_listeners.erase(itr);
@@ -51,6 +47,7 @@ DiskMemUsageForwarder::notifyDiskMemUsage(DiskMemUsageState state)
void
DiskMemUsageForwarder::forward(DiskMemUsageState state)
{
+ std::lock_guard guard(_lock);
if (_state != state) {
_state = state;
for (const auto &listener : _listeners) {
diff --git a/searchcore/src/vespa/searchcore/proton/server/disk_mem_usage_forwarder.h b/searchcore/src/vespa/searchcore/proton/server/disk_mem_usage_forwarder.h
index 618b9af91eb..431bbad4675 100644
--- a/searchcore/src/vespa/searchcore/proton/server/disk_mem_usage_forwarder.h
+++ b/searchcore/src/vespa/searchcore/proton/server/disk_mem_usage_forwarder.h
@@ -6,6 +6,7 @@
#include "i_disk_mem_usage_listener.h"
#include <vespa/searchcorespi/index/i_thread_service.h>
#include <vector>
+#include <mutex>
namespace proton {
@@ -18,6 +19,7 @@ class DiskMemUsageForwarder : public IDiskMemUsageNotifier,
{
searchcorespi::index::IThreadService &_executor;
std::vector<IDiskMemUsageListener *> _listeners;
+ std::mutex _lock;
DiskMemUsageState _state;
void forward(DiskMemUsageState state);
public: