wakeup the event queue when placing channel delete events in it

This commit is contained in:
Jeff Hill
2003-03-13 01:29:08 +00:00
parent b26b70ec8e
commit 1a2f2ad7e4
4 changed files with 15 additions and 5 deletions
+10 -1
View File
@@ -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 ();
+3 -1
View File
@@ -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 ()
+1 -2
View File
@@ -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 ();
+1 -1
View File
@@ -1704,7 +1704,7 @@ void casStrmClient::casChannelDestroyNotify (
immediateUninstallNeeded ? & chan : 0,
chan.getSID() );
if ( pEvent ) {
this->eventSys.addToEventQueue ( *pEvent );
this->addToEventQueue ( *pEvent );
}
else {
this->forceDisconnect ();