diff options
| author | MarcoFalke <[email protected]> | 2019-01-25 01:11:17 -0500 |
|---|---|---|
| committer | MarcoFalke <[email protected]> | 2019-01-25 01:11:24 -0500 |
| commit | d14ef5721ffcf07321704dc21f1ab9df4952a44d (patch) | |
| tree | 58dba5c266d908d3c7155988d281c24f13ad0071 /src/sync.cpp | |
| parent | Merge #15193: Default -whitelistforcerelay to off (diff) | |
| parent | Prevent mutex lock fail even if --enable-debug (diff) | |
| download | discoin-d14ef5721ffcf07321704dc21f1ab9df4952a44d.tar.xz discoin-d14ef5721ffcf07321704dc21f1ab9df4952a44d.zip | |
Merge #15233: Prevent mutex lock fail even if --enable-debug
b09dab0f2d Prevent mutex lock fail even if --enable-debug (Akio Nakamura)
Pull request description:
This PR intends to resolve #15227.
```configure --enable-debug``` enables ```#ifdef DEBUG_LOCKORDER```.
Then ```lockdata``` (in sync.cpp) will be initialized same as other static objects.
But unfortunately, ```lockdata.push_lock()``` was called before its initialization (via initializing ```signatureCache``` which is declared in ```script/sigcache.cpp```) on macOS.
This PR apply the "Construct On First Use Idiom" to ```lockdata``` to prevent it.
edited --- fix typo.
Tree-SHA512: 59df99ef78a335b1b7ebed7207d4719ea4412900eea38739f6e8eaaba1f594e1950044851659ce83f4f69813fc96978244bd176676e1aa2277c813ede832e6fb
Diffstat (limited to 'src/sync.cpp')
| -rw-r--r-- | src/sync.cpp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/sync.cpp b/src/sync.cpp index 30811f5f8..23ca866e5 100644 --- a/src/sync.cpp +++ b/src/sync.cpp @@ -73,7 +73,11 @@ struct LockData { LockOrders lockorders; InvLockOrders invlockorders; std::mutex dd_mutex; -} static lockdata; +}; +LockData& GetLockData() { + static LockData lockdata; + return lockdata; +} static thread_local LockStack g_lockstack; @@ -109,6 +113,7 @@ static void potential_deadlock_detected(const std::pair<void*, void*>& mismatch, static void push_lock(void* c, const CLockLocation& locklocation) { + LockData& lockdata = GetLockData(); std::lock_guard<std::mutex> lock(lockdata.dd_mutex); g_lockstack.push_back(std::make_pair(c, locklocation)); @@ -173,6 +178,7 @@ void AssertLockNotHeldInternal(const char* pszName, const char* pszFile, int nLi void DeleteLock(void* cs) { + LockData& lockdata = GetLockData(); if (!lockdata.available) { // We're already shutting down. return; |