mirror of
https://github.com/ElementsProject/elements.git
synced 2026-08-18 13:17:55 +02:00
mutex debugging routines: LocksHeld() and AssertLockHeld()
This commit is contained in:
parent
207cfbfbf1
commit
c649637b6c
3 changed files with 23 additions and 0 deletions
18
src/sync.cpp
18
src/sync.cpp
|
|
@ -42,6 +42,8 @@ struct CLockLocation
|
|||
return mutexName+" "+sourceFile+":"+itostr(sourceLine);
|
||||
}
|
||||
|
||||
std::string MutexName() const { return mutexName; }
|
||||
|
||||
private:
|
||||
std::string mutexName;
|
||||
std::string sourceFile;
|
||||
|
|
@ -126,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 */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue