epicsAutoMutex has a new name, fixed free lists, and allow timer to be deleted during expire

This commit is contained in:
Jeff Hill
2002-03-21 22:45:32 +00:00
parent e66da4714b
commit fec6ba2dbf
6 changed files with 220 additions and 196 deletions

View File

@@ -31,6 +31,7 @@
#include <limits.h>
#define epicsExportSharedSymbols
#include "epicsGuard.h"
#include "timerPrivate.h"
timerQueueActiveMgr::timerQueueActiveMgr ()
@@ -39,13 +40,13 @@ timerQueueActiveMgr::timerQueueActiveMgr ()
timerQueueActiveMgr::~timerQueueActiveMgr ()
{
epicsAutoMutex locker ( this->mutex );
epicsGuard < epicsMutex > locker ( this->mutex );
}
epicsTimerQueueActiveForC & timerQueueActiveMgr::allocate (
bool okToShare, unsigned threadPriority )
{
epicsAutoMutex locker ( this->mutex );
epicsGuard < epicsMutex > locker ( this->mutex );
if ( okToShare ) {
tsDLIterBD < epicsTimerQueueActiveForC > iter = this->sharedQueueList.firstIter ();
while ( iter.valid () ) {
@@ -56,20 +57,18 @@ epicsTimerQueueActiveForC & timerQueueActiveMgr::allocate (
}
}
}
epicsTimerQueueActiveForC *pQueue = new epicsTimerQueueActiveForC ( okToShare, threadPriority );
if ( ! pQueue ) {
throw std::bad_alloc ();
}
pQueue->timerQueueActiveMgrPrivate::referenceCount = 1u;
epicsTimerQueueActiveForC & queue = * new epicsTimerQueueActiveForC ( okToShare, threadPriority );
queue.timerQueueActiveMgrPrivate::referenceCount = 1u;
if ( okToShare ) {
this->sharedQueueList.add ( *pQueue );
this->sharedQueueList.add ( queue );
}
return *pQueue;
return queue;
}
void timerQueueActiveMgr::release ( epicsTimerQueueActiveForC &queue )
{
epicsAutoMutex locker ( this->mutex );
epicsGuard < epicsMutex > locker ( this->mutex );
assert ( queue.timerQueueActiveMgrPrivate::referenceCount > 0u );
queue.timerQueueActiveMgrPrivate::referenceCount--;
if ( queue.timerQueueActiveMgrPrivate::referenceCount == 0u ) {