test: Improve "potential deadlock detected" exception message

This commit is contained in:
Hennadii Stepanov 2020-06-22 18:21:12 +03:00
parent 35599344c8
commit bbe9cf4fe4
No known key found for this signature in database
GPG key ID: 410108112E7EA81F
2 changed files with 6 additions and 2 deletions

View file

@ -114,13 +114,17 @@ static void potential_deadlock_detected(const LockPair& mismatch, const LockStac
} }
LogPrintf(" %s\n", i.second.ToString()); LogPrintf(" %s\n", i.second.ToString());
} }
std::string mutex_a, mutex_b;
LogPrintf("Current lock order is:\n"); LogPrintf("Current lock order is:\n");
for (const LockStackItem& i : s2) { for (const LockStackItem& i : s2) {
if (i.first == mismatch.first) { if (i.first == mismatch.first) {
LogPrintf(" (1)"); /* Continued */ LogPrintf(" (1)"); /* Continued */
mutex_a = i.second.Name();
} }
if (i.first == mismatch.second) { if (i.first == mismatch.second) {
LogPrintf(" (2)"); /* Continued */ LogPrintf(" (2)"); /* Continued */
mutex_b = i.second.Name();
} }
LogPrintf(" %s\n", i.second.ToString()); LogPrintf(" %s\n", i.second.ToString());
} }
@ -128,7 +132,7 @@ static void potential_deadlock_detected(const LockPair& mismatch, const LockStac
tfm::format(std::cerr, "Assertion failed: detected inconsistent lock order at %s:%i, details in debug log.\n", __FILE__, __LINE__); tfm::format(std::cerr, "Assertion failed: detected inconsistent lock order at %s:%i, details in debug log.\n", __FILE__, __LINE__);
abort(); abort();
} }
throw std::logic_error("potential deadlock detected"); throw std::logic_error(strprintf("potential deadlock detected: %s -> %s -> %s", mutex_b, mutex_a, mutex_b));
} }
static void push_lock(void* c, const CLockLocation& locklocation) static void push_lock(void* c, const CLockLocation& locklocation)

View file

@ -18,7 +18,7 @@ void TestPotentialDeadLockDetected(MutexType& mutex1, MutexType& mutex2)
try { try {
LOCK2(mutex2, mutex1); LOCK2(mutex2, mutex1);
} catch (const std::logic_error& e) { } catch (const std::logic_error& e) {
BOOST_CHECK_EQUAL(e.what(), "potential deadlock detected"); BOOST_CHECK_EQUAL(e.what(), "potential deadlock detected: mutex1 -> mutex2 -> mutex1");
error_thrown = true; error_thrown = true;
} }
#ifdef DEBUG_LOCKORDER #ifdef DEBUG_LOCKORDER