Qutex: Add check for double-release()
This commit is contained in:
+17
-7
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user