From f15c07bc83178091b357a889155936c879a59893 Mon Sep 17 00:00:00 2001 From: Hayodea Hekol Date: Tue, 30 Sep 2025 10:36:19 -0400 Subject: [PATCH] LockSet:tryAcquireOrBackoff use optional> Replace the previous Qutex** raw pointer with a std::optional. --- include/lockSet.h | 5 ++++- include/serializedAsynchronousContinuation.h | 8 +++----- smocore/lockSet.cpp | 7 +++---- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/include/lockSet.h b/include/lockSet.h index 6af471d..d58e09d 100644 --- a/include/lockSet.h +++ b/include/lockSet.h @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -85,7 +86,9 @@ public: * @return true if all locks were acquired, false otherwise */ bool tryAcquireOrBackOff( - LockerAndInvokerBase &lockvoker, Qutex **firstFailedQutex = nullptr); + LockerAndInvokerBase &lockvoker, + std::optional> &firstFailedQutex + = std::nullopt); void unregisterFromQutexQueues(); // @brief Release all locks diff --git a/include/serializedAsynchronousContinuation.h b/include/serializedAsynchronousContinuation.h index 3453fb9..fde43de 100644 --- a/include/serializedAsynchronousContinuation.h +++ b/include/serializedAsynchronousContinuation.h @@ -107,14 +107,12 @@ public: "executing on wrong ComponentThread"); } - Qutex *firstFailedQutexPtr = nullptr; + std::optional> firstFailedQutexRet; bool deadlockLikely = isDeadlockLikely(); bool gridlockLikely = isGridlockLikely(); if (!serializedContinuation.requiredLocks.tryAcquireOrBackOff( - *this, - ((deadlockLikely || gridlockLikely) - ? &firstFailedQutexPtr : nullptr))) + *this, firstFailedQutexRet)) { // Just allow this lockvoker to be dropped from its io_service. allowAwakening(); @@ -122,7 +120,7 @@ public: { return; } #ifdef CONFIG_ENABLE_DEBUG_LOCKS - Qutex &firstFailedQutex = *firstFailedQutexPtr; + Qutex &firstFailedQutex = firstFailedQutexRet.value().get(); bool isDeadlock = traceContinuationHistoryForDeadlockOn( firstFailedQutex); diff --git a/smocore/lockSet.cpp b/smocore/lockSet.cpp index 732b3ee..0aeff51 100644 --- a/smocore/lockSet.cpp +++ b/smocore/lockSet.cpp @@ -44,7 +44,8 @@ void LockSet::registerInQutexQueues( template bool LockSet::tryAcquireOrBackOff( - LockerAndInvokerBase &lockvoker, Qutex **firstFailedQutex + LockerAndInvokerBase &lockvoker, + std::optional> &firstFailedQutex ) { if (!registeredInQutexQueues) @@ -71,9 +72,7 @@ bool LockSet::tryAcquireOrBackOff( lockvoker, nRequiredLocks)) { // Set the first failed qutex for debugging - if (firstFailedQutex) { - *firstFailedQutex = &lockUsageDesc.first.get(); - } + firstFailedQutex = std::ref(lockUsageDesc.first.get()); break; }