aboutsummaryrefslogtreecommitdiff
path: root/src/util/threadinterrupt.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/util/threadinterrupt.cpp')
-rw-r--r--src/util/threadinterrupt.cpp35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/util/threadinterrupt.cpp b/src/util/threadinterrupt.cpp
new file mode 100644
index 0000000000..70731d6f31
--- /dev/null
+++ b/src/util/threadinterrupt.cpp
@@ -0,0 +1,35 @@
+// Copyright (c) 2009-2010 Satoshi Nakamoto
+// Copyright (c) 2009-2018 The Bitcoin Core developers
+// Distributed under the MIT software license, see the accompanying
+// file COPYING or http://www.opensource.org/licenses/mit-license.php.
+
+#include <util/threadinterrupt.h>
+
+#include <sync.h>
+
+CThreadInterrupt::CThreadInterrupt() : flag(false) {}
+
+CThreadInterrupt::operator bool() const
+{
+ return flag.load(std::memory_order_acquire);
+}
+
+void CThreadInterrupt::reset()
+{
+ flag.store(false, std::memory_order_release);
+}
+
+void CThreadInterrupt::operator()()
+{
+ {
+ LOCK(mut);
+ flag.store(true, std::memory_order_release);
+ }
+ cond.notify_all();
+}
+
+bool CThreadInterrupt::sleep_for(Clock::duration rel_time)
+{
+ WAIT_LOCK(mut, lock);
+ return !cond.wait_for(lock, rel_time, [this]() { return flag.load(std::memory_order_acquire); });
+}