diff --git a/include/serializedAsynchronousContinuation.h b/include/serializedAsynchronousContinuation.h index 48d634d..e89730d 100644 --- a/include/serializedAsynchronousContinuation.h +++ b/include/serializedAsynchronousContinuation.h @@ -72,6 +72,15 @@ public: target(target), invocationTarget(std::move(invocationTarget)) { +#ifdef CONFIG_ENABLE_DEBUG_LOCKS + if (traceContinuationHistoryForDeadlock()) + { + handleDeadlock(); + throw std::runtime_error( + "LockerAndInvoker::LockerAndInvoker(): Deadlock detected"); + } +#endif // CONFIG_ENABLE_DEBUG_LOCKS + firstWake(); } @@ -195,6 +204,20 @@ public: #ifdef CONFIG_ENABLE_DEBUG_LOCKS bool traceContinuationHistoryForDeadlockOn(Qutex &firstFailedQutex); + bool traceContinuationHistoryForDeadlock(void) + { + for (auto& lockUsageDesc + : serializedContinuation.requiredLocks.locks) + { + if (traceContinuationHistoryForDeadlockOn( + lockUsageDesc.first.get())) + { + return true; + } + } + return false; + } + /** * @brief Handle a likely deadlock situation by logging debug information * @param firstFailedQutex The first qutex that failed acquisition