mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-27 03:33:27 -03:00
Merge #20507: sync: print proper lock order location when double lock is detected
db058efeb0
sync: use HasReason() in double lock tests (Vasil Dimov)a21dc469cc
sync: const-qualify the argument of double_lock_detected() (Vasil Dimov)6d3689fcf6
sync: print proper lock order location when double lock is detected (Vasil Dimov) Pull request description: Before: ``` Assertion failed: detected double lock at src/sync.cpp:153, details in debug log. ``` After: ``` Assertion failed: detected double lock for 'm' in src/test/sync_tests.cpp:40 (in thread ''), details in debug log. ``` ACKs for top commit: jonasschnelli: utACKdb058efeb0
ajtowns: ACKdb058efeb0
hebasto: ACKdb058efeb0
, tested on Linux Mint 20 (x86_64). Tree-SHA512: 452ddb9a14e44bb174135b39f2219c76eadbb8a6c0e80d64a25f995780d6dbc7b570d9902616db94dbfabaee197b5828ba3475171a68240ac0958fb203a7acdb
This commit is contained in:
commit
7f0f01f0ab
2 changed files with 6 additions and 6 deletions
|
@ -139,7 +139,7 @@ static void potential_deadlock_detected(const LockPair& mismatch, const LockStac
|
||||||
throw std::logic_error(strprintf("potential deadlock detected: %s -> %s -> %s", mutex_b, mutex_a, mutex_b));
|
throw std::logic_error(strprintf("potential deadlock detected: %s -> %s -> %s", mutex_b, mutex_a, mutex_b));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void double_lock_detected(const void* mutex, LockStack& lock_stack)
|
static void double_lock_detected(const void* mutex, const LockStack& lock_stack)
|
||||||
{
|
{
|
||||||
LogPrintf("DOUBLE LOCK DETECTED\n");
|
LogPrintf("DOUBLE LOCK DETECTED\n");
|
||||||
LogPrintf("Lock order:\n");
|
LogPrintf("Lock order:\n");
|
||||||
|
@ -150,7 +150,9 @@ static void double_lock_detected(const void* mutex, LockStack& lock_stack)
|
||||||
LogPrintf(" %s\n", i.second.ToString());
|
LogPrintf(" %s\n", i.second.ToString());
|
||||||
}
|
}
|
||||||
if (g_debug_lockorder_abort) {
|
if (g_debug_lockorder_abort) {
|
||||||
tfm::format(std::cerr, "Assertion failed: detected double lock at %s:%i, details in debug log.\n", __FILE__, __LINE__);
|
tfm::format(std::cerr,
|
||||||
|
"Assertion failed: detected double lock for %s, details in debug log.\n",
|
||||||
|
lock_stack.back().second.ToString());
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
throw std::logic_error("double lock detected");
|
throw std::logic_error("double lock detected");
|
||||||
|
|
|
@ -50,10 +50,8 @@ void TestDoubleLock(bool should_throw)
|
||||||
MutexType m;
|
MutexType m;
|
||||||
ENTER_CRITICAL_SECTION(m);
|
ENTER_CRITICAL_SECTION(m);
|
||||||
if (should_throw) {
|
if (should_throw) {
|
||||||
BOOST_CHECK_EXCEPTION(
|
BOOST_CHECK_EXCEPTION(TestDoubleLock2(m), std::logic_error,
|
||||||
TestDoubleLock2(m), std::logic_error, [](const std::logic_error& e) {
|
HasReason("double lock detected"));
|
||||||
return strcmp(e.what(), "double lock detected") == 0;
|
|
||||||
});
|
|
||||||
} else {
|
} else {
|
||||||
BOOST_CHECK_NO_THROW(TestDoubleLock2(m));
|
BOOST_CHECK_NO_THROW(TestDoubleLock2(m));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue