Lockvoker: add handleGridlock and invoke it

This commit is contained in:
2025-09-30 00:32:54 -04:00
parent b7ff100499
commit ed9635582f
2 changed files with 21 additions and 3 deletions
+3 -1
View File
@@ -159,7 +159,8 @@ public:
if (!isDeadlock && !isGridlock)
{ return; }
handleDeadlock(firstFailedQutex);
if (isDeadlock) { handleDeadlock(firstFailedQutex); }
if (isGridlock) { handleGridlock(firstFailedQutex); }
#endif
return;
}
@@ -309,6 +310,7 @@ public:
* @param firstFailedQutex The first qutex that failed acquisition
*/
void handleDeadlock(Qutex &firstFailedQutex);
void handleGridlock(Qutex &firstFailedQutex);
#endif
private:
@@ -179,6 +179,22 @@ SerializedAsynchronousContinuation<OriginalCbFnT>
<< " (" << firstFailedQutex.name << ")" << std::endl;
}
template <class OriginalCbFnT>
template <class InvocationTargetT>
void
SerializedAsynchronousContinuation<OriginalCbFnT>
::LockerAndInvoker<InvocationTargetT>
::handleGridlock(Qutex &firstFailedQutex)
{
std::cerr << __func__ << ": Gridlock: "
<< "Lockvoker has been waiting for "
<< std::chrono::duration_cast<std::chrono::milliseconds>(
std::chrono::steady_clock::now() - this->creationTimestamp)
.count()
<< "ms, failed on qutex @" << &firstFailedQutex
<< " (" << firstFailedQutex.name << ")" << std::endl;
}
#endif
template <class OriginalCbFnT>