From e3ce533fe4b90a4117257c471dd69c1562945789 Mon Sep 17 00:00:00 2001 From: Hayodea Hekol Date: Tue, 30 Sep 2025 10:22:28 -0400 Subject: [PATCH] Use optional for type-safe retval --- include/serializedAsynchronousContinuation.h | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/include/serializedAsynchronousContinuation.h b/include/serializedAsynchronousContinuation.h index 591e1e7..3453fb9 100644 --- a/include/serializedAsynchronousContinuation.h +++ b/include/serializedAsynchronousContinuation.h @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -79,9 +80,12 @@ public: invocationTarget(std::move(invocationTarget)) { #ifdef CONFIG_ENABLE_DEBUG_LOCKS - if (traceContinuationHistoryForDeadlock()) + std::optional> firstFailedQutex = + traceContinuationHistoryForDeadlock(); + + if (firstFailedQutex.has_value()) { - handleDeadlock(); + handleDeadlock(firstFailedQutex.value().get()); throw std::runtime_error( "LockerAndInvoker::LockerAndInvoker(): Deadlock detected"); } @@ -308,7 +312,8 @@ public: }; bool traceContinuationHistoryForDeadlockOn(Qutex &firstFailedQutex); - bool traceContinuationHistoryForDeadlock(void) + std::optional> + traceContinuationHistoryForDeadlock(void) { for (auto& lockUsageDesc : serializedContinuation.requiredLocks.locks) @@ -316,10 +321,10 @@ public: if (traceContinuationHistoryForDeadlockOn( lockUsageDesc.first.get())) { - return true; + return std::ref(lockUsageDesc.first.get()); } } - return false; + return std::nullopt; } /**