aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorWladimir J. van der Laan <laanwj@gmail.com>2013-12-19 09:09:51 +0100
committerWladimir J. van der Laan <laanwj@gmail.com>2013-12-19 09:46:11 +0100
commit19a5676280370148492cf59a5103584cf37893ac (patch)
treecc3212d12ff9799fc0d5633b289d1832cb0915d0 /src
parent636a42bd0e208d1d49dab6a95e23863736823883 (diff)
Use mutex pointer instead of name for AssertLockHeld
This makes it useable for non-global locks such as the wallet and keystore locks.
Diffstat (limited to 'src')
-rw-r--r--src/main.cpp2
-rw-r--r--src/sync.cpp6
-rw-r--r--src/sync.h5
3 files changed, 7 insertions, 6 deletions
diff --git a/src/main.cpp b/src/main.cpp
index d130e9705e..174c993453 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 9a20c87f88..b57d8c3c00 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 c50abf81b6..077ed59b89 100644
--- a/src/sync.h
+++ b/src/sync.h
@@ -88,12 +88,13 @@ typedef AnnotatedMixin<boost::mutex> 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);