wakeup the event queue when placing channel delete events in it
This commit is contained in:
@@ -108,6 +108,7 @@ public:
|
||||
bool & onTheEventQueue );
|
||||
void addToEventQueue (
|
||||
casChannelI &, bool & inTheEventQueue );
|
||||
void addToEventQueue ( class channelDestroyEvent & ev );
|
||||
void enableEvents ();
|
||||
void disableEvents ();
|
||||
caStatus casMonitorCallBack (
|
||||
@@ -128,8 +129,8 @@ public:
|
||||
casMonEvent &, epicsGuard < evSysMutex > & );
|
||||
|
||||
protected:
|
||||
mutable casClientMutex mutex;
|
||||
casEventSys eventSys;
|
||||
mutable casClientMutex mutex;
|
||||
casCtx ctx;
|
||||
bool userStartedAsyncIO;
|
||||
|
||||
@@ -202,6 +203,14 @@ inline void casCoreClient::addToEventQueue (
|
||||
}
|
||||
}
|
||||
|
||||
inline void casCoreClient::addToEventQueue ( class channelDestroyEvent & ev )
|
||||
{
|
||||
bool wakeUpNeeded = this->eventSys.addToEventQueue ( ev );
|
||||
if ( wakeUpNeeded ) {
|
||||
this->eventSignal ();
|
||||
}
|
||||
}
|
||||
|
||||
inline void casCoreClient::enableEvents ()
|
||||
{
|
||||
this->eventSys.eventsOn ();
|
||||
|
||||
@@ -259,10 +259,12 @@ void casEventSys::removeFromEventQueue ( casAsyncIOI & io, bool & onTheEventQue
|
||||
}
|
||||
}
|
||||
|
||||
void casEventSys::addToEventQueue ( channelDestroyEvent & event )
|
||||
bool casEventSys::addToEventQueue ( channelDestroyEvent & event )
|
||||
{
|
||||
epicsGuard < epicsMutex > guard ( this->mutex );
|
||||
bool wakeupRequired = ! this->dontProcess && this->eventLogQue.count()==0;
|
||||
this->eventLogQue.add ( event );
|
||||
return wakeupRequired;
|
||||
}
|
||||
|
||||
void casEventSys::setDestroyPending ()
|
||||
|
||||
@@ -59,7 +59,6 @@ class casMonitor;
|
||||
class casMonEvent;
|
||||
class casCoreClient;
|
||||
|
||||
class evSysMutex;
|
||||
template < class MUTEX > class epicsGuard;
|
||||
|
||||
class evSysMutex : public epicsMutex {};
|
||||
@@ -86,7 +85,7 @@ public:
|
||||
bool & onTheEventQueue );
|
||||
bool addToEventQueue (
|
||||
casChannelI &, bool & inTheEventQueue );
|
||||
void addToEventQueue ( class channelDestroyEvent & );
|
||||
bool addToEventQueue ( class channelDestroyEvent & );
|
||||
bool getNDuplicateEvents () const;
|
||||
void setDestroyPending ();
|
||||
void eventsOn ();
|
||||
|
||||
@@ -1704,7 +1704,7 @@ void casStrmClient::casChannelDestroyNotify (
|
||||
immediateUninstallNeeded ? & chan : 0,
|
||||
chan.getSID() );
|
||||
if ( pEvent ) {
|
||||
this->eventSys.addToEventQueue ( *pEvent );
|
||||
this->addToEventQueue ( *pEvent );
|
||||
}
|
||||
else {
|
||||
this->forceDisconnect ();
|
||||
|
||||
Reference in New Issue
Block a user