FBSD: StopListener glocking fixup
authorBen Kaduk <kaduk@mit.edu>
Sun, 19 Dec 2010 05:06:13 +0000 (00:06 -0500)
committerDerrick Brashear <shadow@dementia.org>
Mon, 20 Dec 2010 21:43:09 +0000 (13:43 -0800)
afs_osi_Sleep requires the glock (so that it can sleep on it); we
dropped the glock earlier in osi_StopListener because soshutdown and
soclose can sleep, but we must (unconditionally!) acquire it for our
loop waiting on rxk_ListenerPid.

Change-Id: I38c3ab6689a6af7f1693bd3c8348068ee280e530
Reviewed-on: http://gerrit.openafs.org/3549
Reviewed-by: Derrick Brashear <shadow@dementia.org>
Tested-by: BuildBot <buildbot@rampaginggeek.com>

src/rx/FBSD/rx_knet.c

index 5cb6956..c6d2d84 100644 (file)
@@ -108,11 +108,14 @@ osi_StopListener(void)
     bzero(&dvec, sizeof(dvec));
     dvec.iov_base = &c;
     dvec.iov_len = 1;
+    /* afs_osi_Sleep requires the GLOCK */
+    AFS_GLOCK();
     while(rxk_ListenerPid) {
        afs_warn("waiting for rxk_ListenerPid to die\n");
        osi_NetSend(rx_socket, &taddr, &dvec, 1, 1, 0);
        afs_osi_Sleep(&rxk_ListenerPid);
     }
+    AFS_GUNLOCK();
     /* in theory, we are now the only people doing anything with rx_socket */
     soclose(rx_socket);