we have a chicken and egg. can't stop upcall without
killing socket; can't kill socket while rx might try to transmit on it.
cheat, and if rx is shut down, don't process things upcall receives.
FIXES 131577
Change-Id: I6b72f6e7aefb7937b768dcb9c0a83d0ee3317bfa
Reviewed-on: http://gerrit.openafs.org/8931
Reviewed-by: Chas Williams - CONTRACTOR <chas@cmf.nrl.navy.mil>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@your-file-system.com>
#endif
#ifdef RXK_UPCALL_ENV
+extern rx_atomic_t rxinit_status;
+
void
rx_upcall(socket_t so, void *arg, __unused int waitflag)
{
afs_int32 savelen; /* was using rlen but had aliasing problems */
size_t nbytes, resid, noffset;
+ /* we stopped rx but the socket isn't closed yet */
+ if (rx_atomic_test_bit(&rxinit_status, 0))
+ return;
+
/* See if a check for additional packets was issued */
rx_CheckPackets();