From 6196abf3c864f8cc6ab1efc6e5625a5cc68158bd Mon Sep 17 00:00:00 2001 From: Derrick Brashear Date: Thu, 15 Sep 2011 13:48:31 -0400 Subject: [PATCH] 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 --- src/rx/rx.c | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/src/rx/rx.c b/src/rx/rx.c index 1ddc09ed72..baec518045 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;