diff options
-rw-r--r-- | config/src/vespa/config/common/configholder.cpp | 18 | ||||
-rw-r--r-- | config/src/vespa/config/common/configholder.h | 8 |
2 files changed, 14 insertions, 12 deletions
diff --git a/config/src/vespa/config/common/configholder.cpp b/config/src/vespa/config/common/configholder.cpp index c2839b4a123..66c214f470b 100644 --- a/config/src/vespa/config/common/configholder.cpp +++ b/config/src/vespa/config/common/configholder.cpp @@ -5,7 +5,8 @@ namespace config { ConfigHolder::ConfigHolder() - : _monitor(), + : _lock(), + _cond(), _current() { } @@ -15,40 +16,39 @@ ConfigHolder::~ConfigHolder() = default; ConfigUpdate::UP ConfigHolder::provide() { - vespalib::MonitorGuard guard(_monitor); + std::lock_guard guard(_lock); return std::move(_current); } void ConfigHolder::handle(ConfigUpdate::UP update) { - vespalib::MonitorGuard guard(_monitor); + std::lock_guard guard(_lock); if (_current) { update->merge(*_current); } _current = std::move(update); - guard.broadcast(); + _cond.notify_all(); } bool ConfigHolder::wait(milliseconds timeoutInMillis) { - vespalib::MonitorGuard guard(_monitor); - return static_cast<bool>(_current) || guard.wait(timeoutInMillis); + std::unique_lock guard(_lock); + return static_cast<bool>(_current) || (_cond.wait_for(guard, timeoutInMillis) == std::cv_status::no_timeout); } bool ConfigHolder::poll() { - vespalib::MonitorGuard guard(_monitor); + std::lock_guard guard(_lock); return static_cast<bool>(_current); } void ConfigHolder::interrupt() { - vespalib::MonitorGuard guard(_monitor); - guard.broadcast(); + _cond.notify_all(); } } // namespace config diff --git a/config/src/vespa/config/common/configholder.h b/config/src/vespa/config/common/configholder.h index be65d6cff39..35bb6a8ccc2 100644 --- a/config/src/vespa/config/common/configholder.h +++ b/config/src/vespa/config/common/configholder.h @@ -2,7 +2,8 @@ #pragma once #include "iconfigholder.h" -#include <vespa/vespalib/util/sync.h> +#include <mutex> +#include <condition_variable> namespace config { @@ -21,8 +22,9 @@ public: bool poll() override; void interrupt() override; public: - vespalib::Monitor _monitor; - ConfigUpdate::UP _current; + std::mutex _lock; + std::condition_variable _cond; + ConfigUpdate::UP _current; }; } // namespace config |