Qutex: Add check for double-release()

This commit is contained in:
2025-09-30 22:53:01 -04:00
parent eb7fe11de4
commit af19125ac2
+17 -7
View File
@@ -295,14 +295,24 @@ void Qutex::release()
{
lock.acquire();
isOwned = false;
/** FIXME:
* We need to be able to call this twice or more from the same request.
* We can either add further metadata to this class, or we can force all
* release() calls to be done via the Continuation object, such that it
* can ensure that it doesn't double-release any locks that were released
* early.
/** EXPLAINATION:
* A qutex must not have its release() called when it's not owned. The
* plumbing required to permit that is a bit excessive, and we have
* instrumentation to track early qutex release()ing in
* SerializedAsynchronousContinuation.
*/
if (!isOwned
#ifdef CONFIG_ENABLE_DEBUG_LOCKS
|| currOwner == nullptr
#endif
)
{
throw std::runtime_error(
std::string(__func__) +
": release() called on unowned qutex - this should never happen");
}
isOwned = false;
#ifdef CONFIG_ENABLE_DEBUG_LOCKS
currOwner = nullptr;
#endif