revert to using virtual destroy() to destroy timers

This commit is contained in:
Jeff Hill
2001-07-12 17:53:51 +00:00
parent b061bb6eb9
commit c61e68b4e3
22 changed files with 37 additions and 63 deletions
+2
View File
@@ -50,6 +50,8 @@ private:
epicsTimer::~epicsTimer () {}
epicsTimerQueueNotify::~epicsTimerQueueNotify () {}
void epicsTimerNotify::show ( unsigned /* level */ ) const {}
epicsTimerForC::epicsTimerForC ( timerQueue &queue, epicsTimerCallback pCBIn, void *pPrivateIn ) :
+9 -5
View File
@@ -46,7 +46,7 @@ public:
class epicsTimer {
public:
virtual ~epicsTimer () = 0;
virtual void destroy () = 0; // requires existence of timer queue
virtual void start ( epicsTimerNotify &, const epicsTime & ) = 0;
virtual void start ( epicsTimerNotify &, double delaySeconds ) = 0;
virtual void cancel () = 0;
@@ -58,23 +58,25 @@ public:
virtual expireInfo getExpireInfo () const = 0;
double getExpireDelay ();
virtual void show ( unsigned int level ) const = 0;
virtual class epicsTimerQueue & getQueue () const = 0;
protected:
virtual ~epicsTimer () = 0; // use destroy
};
class epicsTimerQueue {
public:
virtual ~epicsTimerQueue () = 0;
virtual epicsTimer & createTimer () = 0;
virtual void destroyTimer ( epicsTimer & ) = 0;
virtual void show ( unsigned int level ) const = 0;
protected:
virtual ~epicsTimerQueue () = 0;
};
class epicsTimerQueueActive : public epicsTimerQueue {
public:
virtual ~epicsTimerQueueActive () = 0;
static epicsShareFunc epicsTimerQueueActive & allocate (
bool okToShare, int threadPriority = epicsThreadPriorityMin + 10 );
virtual void release () = 0;
protected:
virtual ~epicsTimerQueueActive () = 0;
};
class epicsTimerQueueNotify {
@@ -82,6 +84,8 @@ public:
// called when a new timer is inserted into the queue and the
// delay to the next expire has changed
virtual void reschedule () = 0;
protected:
virtual ~epicsTimerQueueNotify () = 0;
};
class epicsTimerQueuePassive : public epicsTimerQueue {
+7 -5
View File
@@ -42,6 +42,13 @@ timer::~timer ()
this->cancel ();
}
void timer::destroy ()
{
epicsAutoMutex autoLock ( this->queue.mutex );
this->~timer ();
this->queue.timerFreeList.release ( this, sizeof( *this ) );
}
void timer::start ( epicsTimerNotify & notify, double delaySeconds )
{
this->start ( notify, epicsTime::getCurrent () + delaySeconds );
@@ -177,11 +184,6 @@ void timer::show ( unsigned int level ) const
}
}
epicsTimerQueue & timer::getQueue () const
{
return this->queue;
}
timerQueue & timer::getPrivTimerQueue()
{
return this->queue;
+1 -4
View File
@@ -43,12 +43,12 @@
class timer : public epicsTimer, public tsDLNode < timer > {
public:
void destroy ();
void start ( class epicsTimerNotify &, const epicsTime & );
void start ( class epicsTimerNotify &, double delaySeconds );
void cancel ();
expireInfo getExpireInfo () const;
void show ( unsigned int level ) const;
epicsTimerQueue & getQueue () const;
class timerQueue & getPrivTimerQueue ();
protected:
timer ( class timerQueue & );
@@ -83,7 +83,6 @@ public:
virtual ~timerQueue ();
double process ( const epicsTime & currentTime );
epicsTimer & createTimer ();
void destroyTimer ( epicsTimer & );
void show ( unsigned int level ) const;
epicsTimerForC & createTimerForC ( epicsTimerCallback, void *pPrivateIn );
void destroyTimerForC ( epicsTimerForC & );
@@ -117,7 +116,6 @@ public:
timerQueueActive ( bool okToShare, unsigned priority );
~timerQueueActive () = 0;
epicsTimer & createTimer ();
void destroyTimer ( epicsTimer & );
void show ( unsigned int level ) const;
bool sharingOK () const;
int threadPriority () const;
@@ -167,7 +165,6 @@ class timerQueuePassive : public epicsTimerQueuePassive {
public:
timerQueuePassive ( epicsTimerQueueNotify & );
epicsTimer & createTimer ();
void destroyTimer ( epicsTimer & );
void show ( unsigned int level ) const;
double process ( const epicsTime & currentTime );
epicsTimerForC & createTimerForC ( epicsTimerCallback, void *pPrivateIn );
-7
View File
@@ -163,13 +163,6 @@ epicsTimer & timerQueue::createTimer ()
return * new ( pBuf ) timer ( *this );
}
void timerQueue::destroyTimer ( epicsTimer & tmr )
{
epicsAutoMutex autoLock ( this->mutex );
tmr.~epicsTimer ();
this->timerFreeList.release ( &tmr, sizeof( tmr ) );
}
void timerQueue::show ( unsigned level ) const
{
epicsAutoMutex locker ( this->mutex );
-6
View File
@@ -76,12 +76,6 @@ epicsTimer & timerQueueActive::createTimer ()
return this->queue.createTimer ();
}
void timerQueueActive::destroyTimer ( epicsTimer & et )
{
timer & tmr = dynamic_cast < timer & > ( et );
this->queue.destroyTimer ( tmr );
}
epicsTimerForC & timerQueueActive::createTimerForC ( epicsTimerCallback pCB, void *pPrivateIn )
{
return this->queue.createTimerForC ( pCB, pPrivateIn );
-6
View File
@@ -60,12 +60,6 @@ epicsTimer & timerQueuePassive::createTimer ()
return this->queue.createTimer ();
}
void timerQueuePassive::destroyTimer ( epicsTimer & et )
{
timer & tmr = dynamic_cast < timer & > ( et );
this->queue.destroyTimer ( tmr );
}
epicsTimerForC & timerQueuePassive::createTimerForC ( epicsTimerCallback pCB, void *pPrivateIn )
{
return this->queue.createTimerForC ( pCB, pPrivateIn );