]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
darwin knet avoid rx socket during shutdown
authorDerrick Brashear <shadow@dementia.org>
Fri, 11 Sep 2009 05:59:08 +0000 (01:59 -0400)
committerDerrick Brashear <shadow|account-1000005@unknown>
Thu, 17 Dec 2009 06:48:11 +0000 (22:48 -0800)
theoretically a user thread can race us during shutdown and end up
panicing us if the soclose happens at the wrong time. if we're shutting down
just return. using afs_shuttingdown would have the side effect that we'd lose
the ability to add any graceful behavior.

Reviewed-on: http://gerrit.openafs.org/443
Reviewed-by: Derrick Brashear <shadow@dementia.org>
Tested-by: Derrick Brashear <shadow@dementia.org>
(cherry picked from commit 3898524693e7297e228ded03f34125558f225d58)
Change-Id: I45c3d1a773150ada018a4867139273053f989f57
Reviewed-on: http://gerrit.openafs.org/959

src/rx/DARWIN/rx_knet.c

index 8f8f623c95b8bfa650a23e40faac52d18591fd82..35f26b35961e931f485db7eee36d996d6541e570 100644 (file)
@@ -45,6 +45,11 @@ osi_NetReceive(osi_socket so, struct sockaddr_in *addr, struct iovec *dvec,
 
     for (i = 0; i < nvecs; i++)
        iov[i] = dvec[i];
+
+    if ((afs_termState == AFSOP_STOP_RXK_LISTENER) ||
+       (afs_termState == AFSOP_STOP_COMPLETE))
+       return -1;
+
     if (haveGlock)
        AFS_GUNLOCK();
 #if defined(KERNEL_FUNNEL)
@@ -178,8 +183,13 @@ osi_NetSend(osi_socket so, struct sockaddr_in *addr, struct iovec *dvec,
 
     addr->sin_len = sizeof(struct sockaddr_in);
 
+    if ((afs_termState == AFSOP_STOP_RXK_LISTENER) ||
+       (afs_termState == AFSOP_STOP_COMPLETE))
+       return -1;
+
     if (haveGlock)
        AFS_GUNLOCK();
+
 #if defined(KERNEL_FUNNEL)
     thread_funnel_switch(KERNEL_FUNNEL, NETWORK_FUNNEL);
 #endif