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: openafs-stable-1_8_0pre1~3252 X-Git-Url: https://git.openafs.org/?p=openafs.git;a=commitdiff_plain;h=6196abf3c864f8cc6ab1efc6e5625a5cc68158bd 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 1ddc09e..baec518 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;