diff --git a/src/main.cpp b/src/main.cpp index d130e9705eb..174c9934531 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2238,7 +2238,7 @@ void PushGetBlocks(CNode* pnode, CBlockIndex* pindexBegin, uint256 hashEnd) bool ProcessBlock(CValidationState &state, CNode* pfrom, CBlock* pblock, CDiskBlockPos *dbp) { - AssertLockHeld("cs_main"); + AssertLockHeld(cs_main); // Check for duplicate uint256 hash = pblock->GetHash(); diff --git a/src/sync.cpp b/src/sync.cpp index 9a20c87f888..b57d8c3c00a 100644 --- a/src/sync.cpp +++ b/src/sync.cpp @@ -136,11 +136,11 @@ std::string LocksHeld() return result; } -void AssertLockHeld(std::string strName) +void AssertLockHeldInternal(const char *pszName, const char* pszFile, int nLine, void *cs) { 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()); + if (i.first == cs) return; + LogPrintf("Lock %s not held in %s:%i; locks held:\n%s", pszName, pszFile, nLine, LocksHeld().c_str()); assert(0); } diff --git a/src/sync.h b/src/sync.h index c50abf81b63..077ed59b894 100644 --- a/src/sync.h +++ b/src/sync.h @@ -88,12 +88,13 @@ typedef AnnotatedMixin CWaitableCriticalSection; void EnterCritical(const char* pszName, const char* pszFile, int nLine, void* cs, bool fTry = false); void LeaveCritical(); std::string LocksHeld(); -void AssertLockHeld(std::string strName); +void AssertLockHeldInternal(const char* pszName, const char* pszFile, int nLine, void *cs); #else void static inline EnterCritical(const char* pszName, const char* pszFile, int nLine, void* cs, bool fTry = false) {} void static inline LeaveCritical() {} -void static inline AssertLockHeld(std::string) {} +void static inline AssertLockHeldInternal(const char* pszName, const char* pszFile, int nLine, void *cs) {} #endif +#define AssertLockHeld(cs) AssertLockHeldInternal(#cs, __FILE__, __LINE__, &cs) #ifdef DEBUG_LOCKCONTENTION void PrintLockContention(const char* pszName, const char* pszFile, int nLine);