]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
rx: arrange for Finalize to really stop running calls
authorDerrick Brashear <shadow@dementix.org>
Thu, 15 Sep 2011 17:48:31 +0000 (13:48 -0400)
committerDerrick Brashear <shadow@dementix.org>
Fri, 16 Dec 2011 11:53:25 +0000 (03:53 -0800)
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.

Reviewed-on: http://gerrit.openafs.org/5447
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementix.org>
(cherry picked from commit 6196abf3c864f8cc6ab1efc6e5625a5cc68158bd)

Change-Id: I00fad117ee8386fc29cd2423aa9fb7d89af55160
Reviewed-on: http://gerrit.openafs.org/6313
Reviewed-by: Derrick Brashear <shadow@dementix.org>
Tested-by: Derrick Brashear <shadow@dementix.org>
src/rx/rx.c

index 5d65528e526524fa3eac93b0f05f362ef3364809..7c1199e1dda2156512b671ec8cb61085170df411 100644 (file)
@@ -1837,6 +1837,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.
         */
@@ -1852,20 +1866,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;