while ( nciu * pChan = this->createRespPend.get () ) {
- this->clearChannelRequest ( guard,
- pChan->getSID(guard), pChan->getCID(guard) );
+ // we dont yet know the server's id so we cant
+ // send a channel delete request and will instead
+ // trust that the server can do the proper cleanup
+ // when the circuit disconnects discIIU.installDisconnectedChannel ( guard, *pChan );
}
while ( nciu * pChan = this->unrespCircuit.get () ) {
+ // if we know that the circuit is unresponsive
+ // then we dont send a channel delete request and
+ // will instead trust that the server can do the
+ // proper cleanup when the circuit disconnects
+ pChan->disconnectAllIO ( cbGuard, guard );
+ discIIU.installDisconnectedChannel ( guard, *pChan );
+ }
+
+ while ( nciu * pChan = this->subscripUpdateReqPend.get () ) { pChan->disconnectAllIO ( cbGuard, guard );
+ this->clearChannelRequest ( guard,
+ pChan->getSID(guard), pChan->getCID(guard) ); discIIU.installDisconnectedChannel ( guard, *pChan );
+ pChan->unresponsiveCircuitNotify ( cbGuard, guard );
}
while ( nciu * pChan = this->createReqPend.get () ) {
- // with server prior to V42 IO could exit here
- pChan->disconnectAllIO ( cbGuard, guard ); pChan->serviceShutdownNotify ( cbGuard, guard );
}
while ( nciu * pChan = this->createRespPend.get () ) {
- pChan->disconnectAllIO ( cbGuard, guard );
- this->clearChannelRequest ( guard,
- pChan->getSID(guard), pChan->getCID(guard) );
+ // we dont yet know the server's id so we cant
+ // send a channel delete request and will instead
+ // trust that the server can do the proper cleanup
+ // when the circuit disconnects pChan->serviceShutdownNotify ( cbGuard, guard );
}
while ( nciu * pChan = this->unrespCircuit.get () ) { pChan->disconnectAllIO ( cbGuard, guard );
+ // if we know that the circuit is unresponsive
+ // then we dont send a channel delete request and
+ // will instead trust that the server can do the
+ // proper cleanup when the circuit disconnects
+ pChan->serviceShutdownNotify ( cbGuard, guard );
+ }
+
+ while ( nciu * pChan = this->subscripUpdateReqPend.get () ) {
+ pChan->disconnectAllIO ( cbGuard, guard );
+ this->clearChannelRequest ( guard,
+ pChan->getSID(guard), pChan->getCID(guard) ); pChan->serviceShutdownNotify ( cbGuard, guard );
}
committed a fix
cvs diff -wb -- tcpiiu.cpp (in directory C:\hill\ R3.14.dll_ hell_fix\ epics\base\ src\ca\ ) ======= ======= ======= ======= ======= ======= ======= ======= ==== epicsmgr/ cvsroot/ epics/base/ src/ca/ tcpiiu. cpp,v
Index: tcpiiu.cpp
=======
RCS file: /net/phoebus/
retrieving revision 1.154.2.41
diff -u -b -w -b -r1.154.2.41 tcpiiu.cpp
--- tcpiiu.cpp 7 Jul 2009 23:47:38 -0000 1.154.2.41
+++ tcpiiu.cpp 8 Jul 2009 17:37:20 -0000
@@ -1775,8 +1775,10 @@
}
while ( nciu * pChan = this->createRes pPend.get () ) { nelRequest ( guard, getSID( guard), pChan-> getCID( guard) );
discIIU. installDisconne ctedChannel ( guard, *pChan );
- this->clearChan
- pChan->
+ // we dont yet know the server's id so we cant
+ // send a channel delete request and will instead
+ // trust that the server can do the proper cleanup
+ // when the circuit disconnects
}
@@ -1788,19 +1790,35 @@
while ( nciu * pChan = this->subscripR eqPend. get () ) {
pChan- >disconnectAllI O ( cbGuard, guard ); nelRequest ( guard, getSID( guard), pChan-> getCID( guard) );
discIIU. installDisconne ctedChannel ( guard, *pChan );
pChan- >unresponsiveCi rcuitNotify ( cbGuard, guard );
+ this->clearChan
+ pChan->
}
while ( nciu * pChan = this->connected List.get () ) {
pChan- >disconnectAllI O ( cbGuard, guard ); nelRequest ( guard, getSID( guard), pChan-> getCID( guard) );
discIIU. installDisconne ctedChannel ( guard, *pChan );
pChan- >unresponsiveCi rcuitNotify ( cbGuard, guard );
+ this->clearChan
+ pChan->
}
while ( nciu * pChan = this->unrespCir cuit.get () ) { disconnectAllIO ( cbGuard, guard ); installDisconne ctedChannel ( guard, *pChan ); pdateReqPend. get () ) {
pChan- >disconnectAllI O ( cbGuard, guard ); nelRequest ( guard, getSID( guard), pChan-> getCID( guard) );
discIIU. installDisconne ctedChannel ( guard, *pChan ); unresponsiveCir cuitNotify ( cbGuard, guard );
+ // if we know that the circuit is unresponsive
+ // then we dont send a channel delete request and
+ // will instead trust that the server can do the
+ // proper cleanup when the circuit disconnects
+ pChan->
+ discIIU.
+ }
+
+ while ( nciu * pChan = this->subscripU
+ this->clearChan
+ pChan->
+ pChan->
}
this- >channelCountTo t = 0u; assertIdentical Mutex ( this->mutex );
@@ -1816,20 +1834,18 @@
guard.
while ( nciu * pChan = this->createReq Pend.get () ) { disconnectAllIO ( cbGuard, guard );
pChan- >serviceShutdow nNotify ( cbGuard, guard );
- // with server prior to V42 IO could exit here
- pChan->
}
while ( nciu * pChan = this->createRes pPend.get () ) { disconnectAllIO ( cbGuard, guard ); nelRequest ( guard, getSID( guard), pChan-> getCID( guard) );
pChan- >serviceShutdow nNotify ( cbGuard, guard );
- pChan->
- this->clearChan
- pChan->
+ // we dont yet know the server's id so we cant
+ // send a channel delete request and will instead
+ // trust that the server can do the proper cleanup
+ // when the circuit disconnects
}
while ( nciu * pChan = this->v42ConnCa llbackPend. get () ) { disconnectAllIO ( cbGuard, guard );
this- >clearChannelRe quest ( guard,
pChan- >getSID( guard), pChan-> getCID( guard) );
pChan- >serviceShutdow nNotify ( cbGuard, guard );
- pChan->
@@ -1837,16 +1853,31 @@
while ( nciu * pChan = this->subscripR eqPend. get () ) {
pChan- >disconnectAllI O ( cbGuard, guard ); nelRequest ( guard, getSID( guard), pChan-> getCID( guard) );
pChan- >serviceShutdow nNotify ( cbGuard, guard );
+ this->clearChan
+ pChan->
}
while ( nciu * pChan = this->connected List.get () ) {
pChan- >disconnectAllI O ( cbGuard, guard ); nelRequest ( guard, getSID( guard), pChan-> getCID( guard) );
pChan- >serviceShutdow nNotify ( cbGuard, guard );
+ this->clearChan
+ pChan->
}
while ( nciu * pChan = this->unrespCir cuit.get () ) {
pChan- >disconnectAllI O ( cbGuard, guard ); serviceShutdown Notify ( cbGuard, guard ); pdateReqPend. get () ) { disconnectAllIO ( cbGuard, guard ); nelRequest ( guard, getSID( guard), pChan-> getCID( guard) );
pChan- >serviceShutdow nNotify ( cbGuard, guard );
+ // if we know that the circuit is unresponsive
+ // then we dont send a channel delete request and
+ // will instead trust that the server can do the
+ // proper cleanup when the circuit disconnects
+ pChan->
+ }
+
+ while ( nciu * pChan = this->subscripU
+ pChan->
+ this->clearChan
+ pChan->
}