Branch data Line data Source code
1 : : // Copyright (c) 2009-2010 Satoshi Nakamoto
2 : : // Copyright (c) 2009-2022 The Bitcoin Core developers
3 : : // Distributed under the MIT software license, see the accompanying
4 : : // file COPYING or http://www.opensource.org/licenses/mit-license.php.
5 : :
6 : : #include <util/threadinterrupt.h>
7 : :
8 : : #include <sync.h>
9 : :
10 : 2735 : CThreadInterrupt::CThreadInterrupt() : flag(false) {}
11 : :
12 : 417 : bool CThreadInterrupt::interrupted() const
13 : : {
14 : 417 : return flag.load(std::memory_order_acquire);
15 : : }
16 : :
17 : 7930 : CThreadInterrupt::operator bool() const
18 : : {
19 : 7930 : return interrupted();
20 : : }
21 : :
22 : 0 : void CThreadInterrupt::reset()
23 : : {
24 : 0 : flag.store(false, std::memory_order_release);
25 : 0 : }
26 : :
27 : 3484 : void CThreadInterrupt::operator()()
28 : : {
29 : 3484 : {
30 : 3484 : LOCK(mut);
31 [ + - ]: 3484 : flag.store(true, std::memory_order_release);
32 : 3484 : }
33 : 3484 : cond.notify_all();
34 : 3484 : }
35 : :
36 : 0 : bool CThreadInterrupt::sleep_for(Clock::duration rel_time)
37 : : {
38 : 0 : WAIT_LOCK(mut, lock);
39 [ # # # # : 0 : return !cond.wait_for(lock, rel_time, [this]() { return flag.load(std::memory_order_acquire); });
# # ]
40 : 0 : }
|