diff --git a/src/libCom/timer/timerQueueActiveMgr.cpp b/src/libCom/timer/timerQueueActiveMgr.cpp index 1b04bee98..803b96bba 100644 --- a/src/libCom/timer/timerQueueActiveMgr.cpp +++ b/src/libCom/timer/timerQueueActiveMgr.cpp @@ -58,20 +58,21 @@ epicsTimerQueueActiveForC & timerQueueActiveMgr :: void timerQueueActiveMgr :: release ( epicsTimerQueueActiveForC & queue ) { - timerQueueActiveMgrPrivate * pPriv = & queue; { epicsGuard < epicsMutex > locker ( this->mutex ); assert ( queue.timerQueueActiveMgrPrivate::referenceCount > 0u ); queue.timerQueueActiveMgrPrivate::referenceCount--; - if ( queue.timerQueueActiveMgrPrivate::referenceCount == 0u ) { - if ( queue.sharingOK () ) { - this->sharedQueueList.remove ( queue ); - } + if ( queue.timerQueueActiveMgrPrivate::referenceCount > 0u ) { + return; + } + else if ( queue.sharingOK () ) { + this->sharedQueueList.remove ( queue ); } } // delete only after we release the guard in case the embedded // reference is the last one and this object is destroyed // as a side effect + timerQueueActiveMgrPrivate * pPriv = & queue; delete pPriv; }