code to remove channel from the event queue when it is deleted
This commit is contained in:
@@ -32,6 +32,9 @@ casChannelI::casChannelI ( casCoreClient & clientIn,
|
||||
|
||||
casChannelI::~casChannelI ()
|
||||
{
|
||||
this->privateForPV.client().removeFromEventQueue (
|
||||
*this, this->accessRightsEvPending );
|
||||
|
||||
this->pv.destroyAllIO ( this->ioList );
|
||||
|
||||
this->serverDeletePending = true;
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
#include "casCoreClient.h"
|
||||
#include "casAsyncPVExistIOI.h"
|
||||
#include "casAsyncPVAttachIOI.h"
|
||||
#include "casChannelI.h"
|
||||
|
||||
casCoreClient::casCoreClient ( caServerI & serverInternal ) :
|
||||
eventSys ( *this )
|
||||
@@ -124,9 +125,10 @@ caStatus casCoreClient::channelCreateFailedResp (
|
||||
}
|
||||
caStatus casCoreClient::channelDestroyEventNotify (
|
||||
epicsGuard < casClientMutex > &,
|
||||
casChannelI * const, ca_uint32_t )
|
||||
casChannelI * const pChan, ca_uint32_t )
|
||||
{
|
||||
return S_casApp_noSupport;
|
||||
delete pChan;
|
||||
return S_casApp_success;
|
||||
}
|
||||
|
||||
void casCoreClient::casChannelDestroyFromInterfaceNotify (
|
||||
|
||||
@@ -108,6 +108,8 @@ public:
|
||||
bool & onTheEventQueue );
|
||||
void addToEventQueue (
|
||||
casChannelI &, bool & inTheEventQueue );
|
||||
void removeFromEventQueue ( class casChannelI &,
|
||||
bool & inTheEventQueue );
|
||||
void addToEventQueue ( class channelDestroyEvent & ev );
|
||||
void enableEvents ();
|
||||
void disableEvents ();
|
||||
@@ -205,6 +207,12 @@ inline void casCoreClient::addToEventQueue (
|
||||
}
|
||||
}
|
||||
|
||||
inline void casCoreClient::removeFromEventQueue ( class casChannelI & io,
|
||||
bool & inTheEventQueue )
|
||||
{
|
||||
this->eventSys.removeFromEventQueue ( io, inTheEventQueue );
|
||||
}
|
||||
|
||||
inline void casCoreClient::addToEventQueue ( class channelDestroyEvent & ev )
|
||||
{
|
||||
bool wakeUpNeeded = this->eventSys.addToEventQueue ( ev );
|
||||
|
||||
@@ -235,7 +235,17 @@ caStatus casEventSys::addToEventQueue ( casAsyncIOI & event,
|
||||
return S_cas_success;
|
||||
}
|
||||
|
||||
bool casEventSys::addToEventQueue ( casChannelI & event, bool & inTheEventQueue )
|
||||
void casEventSys::removeFromEventQueue ( casAsyncIOI & io, bool & onTheEventQueue )
|
||||
{
|
||||
epicsGuard < epicsMutex > guard ( this->mutex );
|
||||
if ( onTheEventQueue ) {
|
||||
onTheEventQueue = false;
|
||||
this->eventLogQue.remove ( io );
|
||||
}
|
||||
}
|
||||
|
||||
bool casEventSys::addToEventQueue ( casChannelI & event,
|
||||
bool & inTheEventQueue )
|
||||
{
|
||||
bool wakeupRequired = false;
|
||||
{
|
||||
@@ -248,14 +258,15 @@ bool casEventSys::addToEventQueue ( casChannelI & event, bool & inTheEventQueue
|
||||
}
|
||||
return wakeupRequired;
|
||||
}
|
||||
|
||||
void casEventSys::removeFromEventQueue ( casAsyncIOI & io, bool & onTheEventQueue )
|
||||
|
||||
void casEventSys::removeFromEventQueue ( class casChannelI & io,
|
||||
bool & inTheEventQueue )
|
||||
{
|
||||
epicsGuard < epicsMutex > guard ( this->mutex );
|
||||
if ( onTheEventQueue ) {
|
||||
onTheEventQueue = false;
|
||||
if ( inTheEventQueue ) {
|
||||
inTheEventQueue = false;
|
||||
this->eventLogQue.remove ( io );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool casEventSys::addToEventQueue ( channelDestroyEvent & event )
|
||||
|
||||
@@ -85,6 +85,8 @@ public:
|
||||
bool & onTheEventQueue );
|
||||
bool addToEventQueue (
|
||||
casChannelI &, bool & inTheEventQueue );
|
||||
void removeFromEventQueue ( class casChannelI &,
|
||||
bool & inTheEventQueue );
|
||||
bool addToEventQueue ( class channelDestroyEvent & );
|
||||
bool getNDuplicateEvents () const;
|
||||
void setDestroyPending ();
|
||||
|
||||
Reference in New Issue
Block a user