From 43f58c990aa503d3161cbfbde1520618332a2702 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 1 Jun 2011 16:27:18 -0500 Subject: [PATCH] libCom: Only delete a timer queue when its ref count is 0. Fixes lp:786979 --- src/libCom/timer/timerQueueActiveMgr.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) 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; }