aboutsummaryrefslogtreecommitdiffstats
path: root/config
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2020-10-09 21:14:11 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2020-10-09 21:14:11 +0000
commit25db065a7f8090dc4c0b7ad94278746f49e7ffa9 (patch)
tree8fab84426f73e35fb1ceecf77a826bd74a53a23d /config
parentae9f30dae980ad928664762bc6202fa40f687801 (diff)
Rewrite from vespalib::Monitor to std::mutex and std::condition_variable
Diffstat (limited to 'config')
-rw-r--r--config/src/vespa/config/common/configholder.cpp18
-rw-r--r--config/src/vespa/config/common/configholder.h8
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