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:
@@ -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;
|
||||
|
||||
@@ -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 ¬ify )
|
||||
|
||||
Reference in New Issue
Block a user