0
0
Fork 0
mirror of https://github.com/bitcoin/bitcoin.git synced 2025-02-03 09:56:38 -05:00

Add thread safety annotated wrapper for std::mutex

Co-authored-by: Anthony Towns <aj@erisian.com.au>
This commit is contained in:
Hennadii Stepanov 2020-05-28 09:32:21 +03:00
parent 55b4c65bd1
commit 79be487420
No known key found for this signature in database
GPG key ID: 410108112E7EA81F
2 changed files with 9 additions and 3 deletions

View file

@ -62,7 +62,7 @@ namespace BCLog {
class Logger
{
private:
mutable std::mutex m_cs; // Can not use Mutex from sync.h because in debug mode it would cause a deadlock when a potential deadlock was detected
mutable StdMutex m_cs; // Can not use Mutex from sync.h because in debug mode it would cause a deadlock when a potential deadlock was detected
FILE* m_fileout GUARDED_BY(m_cs) = nullptr;
std::list<std::string> m_msgs_before_open GUARDED_BY(m_cs);

View file

@ -56,12 +56,18 @@
#define ASSERT_EXCLUSIVE_LOCK(...)
#endif // __GNUC__
// StdMutex provides an annotated version of std::mutex for us,
// and should only be used when sync.h Mutex/LOCK/etc are not usable.
class LOCKABLE StdMutex : public std::mutex
{
};
// LockGuard provides an annotated version of lock_guard for us
// should only be used when sync.h Mutex/LOCK/etc aren't usable
class SCOPED_LOCKABLE LockGuard : public std::lock_guard<std::mutex>
class SCOPED_LOCKABLE LockGuard : public std::lock_guard<StdMutex>
{
public:
explicit LockGuard(std::mutex& cs) EXCLUSIVE_LOCK_FUNCTION(cs) : std::lock_guard<std::mutex>(cs) { }
explicit LockGuard(StdMutex& cs) EXCLUSIVE_LOCK_FUNCTION(cs) : std::lock_guard<StdMutex>(cs) {}
~LockGuard() UNLOCK_FUNCTION() {};
};