diff options
Diffstat (limited to 'src/sync.cpp')
| -rw-r--r-- | src/sync.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/sync.cpp b/src/sync.cpp index d6444141d..9a20c87f8 100644 --- a/src/sync.cpp +++ b/src/sync.cpp @@ -3,6 +3,7 @@ // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include "sync.h" + #include "util.h" #include <boost/foreach.hpp> @@ -41,6 +42,8 @@ struct CLockLocation return mutexName+" "+sourceFile+":"+itostr(sourceLine); } + std::string MutexName() const { return mutexName; } + private: std::string mutexName; std::string sourceFile; @@ -125,4 +128,20 @@ void LeaveCritical() pop_lock(); } +std::string LocksHeld() +{ + std::string result; + BOOST_FOREACH(const PAIRTYPE(void*, CLockLocation)&i, *lockstack) + result += i.second.ToString() + std::string("\n"); + return result; +} + +void AssertLockHeld(std::string strName) +{ + BOOST_FOREACH(const PAIRTYPE(void*, CLockLocation)&i, *lockstack) + if (i.second.MutexName() == strName) return; + LogPrintf("Lock %s not held; locks held:\n%s", strName.c_str(), LocksHeld().c_str()); + assert(0); +} + #endif /* DEBUG_LOCKORDER */ |