From 25db065a7f8090dc4c0b7ad94278746f49e7ffa9 Mon Sep 17 00:00:00 2001 From: Henning Baldersheim Date: Fri, 9 Oct 2020 21:14:11 +0000 Subject: Rewrite from vespalib::Monitor to std::mutex and std::condition_variable --- config/src/vespa/config/common/configholder.cpp | 18 +++++++++--------- config/src/vespa/config/common/configholder.h | 8 +++++--- 2 files changed, 14 insertions(+), 12 deletions(-) (limited to 'config/src') 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(_current) || guard.wait(timeoutInMillis); + std::unique_lock guard(_lock); + return static_cast(_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(_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 +#include +#include 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 -- cgit v1.2.3