MutexImpl.unlock()
hangs forever when locked through Semaphore.aquire()
#4026
Labels
MutexImpl.unlock()
hangs forever when locked through Semaphore.aquire()
#4026
The following code hangs forever on the call to
mutex.unlock()
:The reason seems to be that
MutexImpl
extendsSemaphoreImpl
butSemaphoreImpl.aquire()
bypasses the invariants ofMutexImpl.owner
:aquire
doesn't changeowner
butunlock
spin loops because it expects to see something different thanNO_OWNER
.Similar bugs might be possible with other combinations of
Mutex
andSemaphore
calls forMutexImpl
, I haven't checked yet.Admittedly, this is a bit contrived, so I'm not sure if this is really a bug or just a missuse of implementatiom details (the public
Mutex
interface doesn't extendSemaphore
). But if this is considered worth fixing I see two possible approaches:SemaphoreImpl
methods (through override etc.) so they don't breakMutexImpl
invariantsSemaphoreImpl
into a new abstract base type for bothMutex
andSemaphore
(that however doesn't implementSemaphore
directly) and a thin wrapper around it to actually implementSemaphore
- that way interacting with instances ofMutexImpl
through the methods ofSemaphore
won't be possible in the first placeThe text was updated successfully, but these errors were encountered: