From: Derrick Brashear Date: Thu, 15 Sep 2011 17:48:31 +0000 (-0400) Subject: rx: arrange for Finalize to really stop running calls X-Git-Tag: upstream/1.8.0_pre1^2~3252 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=6196abf3c864f8cc6ab1efc6e5625a5cc68158bd;p=packages%2Fo%2Fopenafs.git rx: arrange for Finalize to really stop running calls previously rxi_ServerProc would happily error a call once rx_tranquil was set, but keep calling ExecuteRequest. Reorder code so kernel shutdown attempts are processed first; then arrange if we are tranquil to not process the call further. Issue discovered by Chaskiel Grundman. Change-Id: I545960fb0eb0d5151baa7e06e2758cdeaf0885da Reviewed-on: http://gerrit.openafs.org/5447 Tested-by: BuildBot Reviewed-by: Derrick Brashear --- diff --git a/src/rx/rx.c b/src/rx/rx.c index 1ddc09ed7..baec51804 100644 --- a/src/rx/rx.c +++ b/src/rx/rx.c @@ -1808,6 +1808,20 @@ rxi_ServerProc(int threadID, struct rx_call *newcall, osi_socket * socketp) } } +#ifdef KERNEL + if (afs_termState == AFSOP_STOP_RXCALLBACK) { +#ifdef RX_ENABLE_LOCKS + AFS_GLOCK(); +#endif /* RX_ENABLE_LOCKS */ + afs_termState = AFSOP_STOP_AFS; + afs_osi_Wakeup(&afs_termState); +#ifdef RX_ENABLE_LOCKS + AFS_GUNLOCK(); +#endif /* RX_ENABLE_LOCKS */ + return; + } +#endif + /* if server is restarting( typically smooth shutdown) then do not * allow any new calls. */ @@ -1823,20 +1837,8 @@ rxi_ServerProc(int threadID, struct rx_call *newcall, osi_socket * socketp) MUTEX_EXIT(&call->lock); USERPRI; + continue; } -#ifdef KERNEL - if (afs_termState == AFSOP_STOP_RXCALLBACK) { -#ifdef RX_ENABLE_LOCKS - AFS_GLOCK(); -#endif /* RX_ENABLE_LOCKS */ - afs_termState = AFSOP_STOP_AFS; - afs_osi_Wakeup(&afs_termState); -#ifdef RX_ENABLE_LOCKS - AFS_GUNLOCK(); -#endif /* RX_ENABLE_LOCKS */ - return; - } -#endif tservice = call->conn->service;