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 <shadow@dementia.org>
Tested-by: Derrick Brashear <shadow@dementia.org>
This commit is contained in:
Derrick Brashear 2009-09-11 01:59:08 -04:00 committed by Derrick Brashear
parent cc7938e8ff
commit 3898524693

View File

@ -45,6 +45,11 @@ osi_NetReceive(osi_socket so, struct sockaddr_in *addr, struct iovec *dvec,
for (i = 0; i < nvecs; i++) for (i = 0; i < nvecs; i++)
iov[i] = dvec[i]; iov[i] = dvec[i];
if ((afs_termState == AFSOP_STOP_RXK_LISTENER) ||
(afs_termState == AFSOP_STOP_COMPLETE))
return -1;
if (haveGlock) if (haveGlock)
AFS_GUNLOCK(); AFS_GUNLOCK();
#if defined(KERNEL_FUNNEL) #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); addr->sin_len = sizeof(struct sockaddr_in);
if ((afs_termState == AFSOP_STOP_RXK_LISTENER) ||
(afs_termState == AFSOP_STOP_COMPLETE))
return -1;
if (haveGlock) if (haveGlock)
AFS_GUNLOCK(); AFS_GUNLOCK();
#if defined(KERNEL_FUNNEL) #if defined(KERNEL_FUNNEL)
thread_funnel_switch(KERNEL_FUNNEL, NETWORK_FUNNEL); thread_funnel_switch(KERNEL_FUNNEL, NETWORK_FUNNEL);
#endif #endif