dont use free list for passive timer queue because of entaglements

between the file scope free list destructor and any file scope
file descriptor manager destructor's attempts to destroy a
passive timer queue
This commit is contained in:
Jeff Hill
2001-06-12 17:16:52 +00:00
parent 08208e995d
commit 87f9c12a77
2 changed files with 8 additions and 19 deletions
-16
View File
@@ -152,14 +152,10 @@ public:
void show ( unsigned int level ) const;
void release ();
timerQueue & getTimerQueue ();
void * operator new ( size_t size );
void operator delete ( void *pCadaver, size_t size );
protected:
~timerQueuePassive ();
private:
timerQueue queue;
static tsFreeList < class timerQueuePassive, 0x8 > freeList;
static epicsMutex freeListMutex;
};
inline void * timer::operator new ( size_t size )
@@ -189,18 +185,6 @@ inline timerQueue & timerQueueActive::getTimerQueue ()
return this->queue;
}
inline void * timerQueuePassive::operator new ( size_t size )
{
epicsAutoMutex locker ( timerQueuePassive::freeListMutex );
return timerQueuePassive::freeList.allocate ( size );
}
inline void timerQueuePassive::operator delete ( void *pCadaver, size_t size )
{
epicsAutoMutex locker ( timerQueuePassive::freeListMutex );
timerQueuePassive::freeList.release ( pCadaver, size );
}
inline timerQueue & timerQueuePassive::getTimerQueue ()
{
return this->queue;
+8 -3
View File
@@ -28,12 +28,17 @@
*
*/
//
// Note, a free list for this class is not currently used because of
// entanglements between the file scope free list destructor and a
// file scope fdManager destructor which is trying to call a
// destructor for a passive timer queue which is no longer valid
// in pool.
//
#define epicsExportSharedSymbols
#include "timerPrivate.h"
tsFreeList < class timerQueuePassive, 0x8 > timerQueuePassive::freeList;
epicsMutex timerQueuePassive::freeListMutex;
epicsTimerQueuePassive::~epicsTimerQueuePassive () {}
epicsTimerQueuePassive &epicsTimerQueuePassive::create ( epicsTimerQueueNotify &notify )