From: Derrick Brashear Date: Fri, 11 Sep 2009 05:59:08 +0000 (-0400) Subject: darwin knet avoid rx socket during shutdown X-Git-Tag: openafs-devel-1_5_63~14 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=3898524693e7297e228ded03f34125558f225d58;p=packages%2Fo%2Fopenafs.git darwin knet avoid rx socket during shutdown 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 Tested-by: Derrick Brashear --- diff --git a/src/rx/DARWIN/rx_knet.c b/src/rx/DARWIN/rx_knet.c index a556e161c..6b85ef406 100644 --- a/src/rx/DARWIN/rx_knet.c +++ b/src/rx/DARWIN/rx_knet.c @@ -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) @@ -151,8 +156,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