diff options
| author | Cory Fields <[email protected]> | 2015-06-16 03:46:36 -0400 |
|---|---|---|
| committer | Cory Fields <[email protected]> | 2015-06-16 03:59:26 -0400 |
| commit | cd27bba060d91995da706bc03cd2ef39b79b49b1 (patch) | |
| tree | b8d476c4404a36394492bf64542892cd5d28642a /src | |
| parent | Merge pull request #6274 (diff) | |
| download | discoin-cd27bba060d91995da706bc03cd2ef39b79b49b1.tar.xz discoin-cd27bba060d91995da706bc03cd2ef39b79b49b1.zip | |
locking: teach Clang's -Wthread-safety to cope with our scoped lock macros
This allows us to use function/variable/class attributes to specify locking
requisites, allowing problems to be detected during static analysis.
This works perfectly with newer Clang versions (tested with 3.3-3.7). For older
versions (tested 3.2), it compiles fine but spews lots of false-positives.
Diffstat (limited to 'src')
| -rw-r--r-- | src/sync.h | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/sync.h b/src/sync.h index 78b904347..705647e4a 100644 --- a/src/sync.h +++ b/src/sync.h @@ -101,7 +101,7 @@ void PrintLockContention(const char* pszName, const char* pszFile, int nLine); /** Wrapper around boost::unique_lock<Mutex> */ template <typename Mutex> -class CMutexLock +class SCOPED_LOCKABLE CMutexLock { private: boost::unique_lock<Mutex> lock; @@ -129,7 +129,7 @@ private: } public: - CMutexLock(Mutex& mutexIn, const char* pszName, const char* pszFile, int nLine, bool fTry = false) : lock(mutexIn, boost::defer_lock) + CMutexLock(Mutex& mutexIn, const char* pszName, const char* pszFile, int nLine, bool fTry = false) EXCLUSIVE_LOCK_FUNCTION(mutexIn) : lock(mutexIn, boost::defer_lock) { if (fTry) TryEnter(pszName, pszFile, nLine); @@ -137,7 +137,7 @@ public: Enter(pszName, pszFile, nLine); } - CMutexLock(Mutex* pmutexIn, const char* pszName, const char* pszFile, int nLine, bool fTry = false) + CMutexLock(Mutex* pmutexIn, const char* pszName, const char* pszFile, int nLine, bool fTry = false) EXCLUSIVE_LOCK_FUNCTION(pmutexIn) { if (!pmutexIn) return; @@ -148,7 +148,7 @@ public: Enter(pszName, pszFile, nLine); } - ~CMutexLock() + ~CMutexLock() UNLOCK_FUNCTION() { if (lock.owns_lock()) LeaveCritical(); |