remove channels from circuit in timer expire callback

This commit is contained in:
Jeff Hill
2003-04-22 18:07:50 +00:00
parent 884c05a15c
commit 181d5f4ff0

View File

@@ -507,10 +507,10 @@ void cac::repeaterSubscribeConfirmNotify ()
}
}
bool cac::lookupChannelAndTransferToTCP (
epicsGuard < callbackMutex > & cbGuard, unsigned cid, unsigned sid,
ca_uint16_t typeCode, arrayElementCount count,
unsigned minorVersionNumber, const osiSockAddr & addr )
bool cac::transferChanToVirtCircuit (
epicsGuard < callbackMutex > & cbGuard, unsigned cid, unsigned sid,
ca_uint16_t typeCode, arrayElementCount count,
unsigned minorVersionNumber, const osiSockAddr & addr )
{
bool newIIU = false;
tcpiiu * piiu = 0;
@@ -1506,6 +1506,11 @@ void cac::initiateAbortShutdown ( tcpiiu & iiu )
{
epicsGuard < callbackMutex > cbGuard ( this->cbMutex );
epicsGuard < cacMutex > guard ( this->mutex );
// Disconnect all channels immediately from the timer thread
// because on certain OS such as HPUX its difficult to
// unblock a blocking send() call, and we need immediate
// disconnect notification.
iiu.removeAllChannels ( cbGuard, guard, *this );
iiu.initiateAbortShutdown ( cbGuard, guard );
}