]>
Commit | Line | Data |
---|---|---|
6b51b9b1 CR |
1 | // Copyright (c) 2015 The Bitcoin Core developers |
2 | // Distributed under the MIT software license, see the accompanying | |
3 | // file COPYING or http://www.opensource.org/licenses/mit-license.php. | |
4 | ||
5 | #ifndef BITCOIN_REVERSELOCK_H | |
6 | #define BITCOIN_REVERSELOCK_H | |
7 | ||
8 | /** | |
9 | * An RAII-style reverse lock. Unlocks on construction and locks on destruction. | |
10 | */ | |
11 | template<typename Lock> | |
12 | class reverse_lock | |
13 | { | |
14 | public: | |
15 | ||
16 | explicit reverse_lock(Lock& lock) : lock(lock) { | |
17 | lock.unlock(); | |
4165af1b | 18 | lock.swap(templock); |
6b51b9b1 CR |
19 | } |
20 | ||
4165af1b CF |
21 | ~reverse_lock() { |
22 | templock.lock(); | |
23 | templock.swap(lock); | |
6b51b9b1 CR |
24 | } |
25 | ||
26 | private: | |
27 | reverse_lock(reverse_lock const&); | |
28 | reverse_lock& operator=(reverse_lock const&); | |
29 | ||
30 | Lock& lock; | |
4165af1b | 31 | Lock templock; |
6b51b9b1 CR |
32 | }; |
33 | ||
34 | #endif // BITCOIN_REVERSELOCK_H |