From a13302dd5a1c83e93ea382a91f1662ccc3a6e27b Mon Sep 17 00:00:00 2001 From: Derrick Brashear Date: Sun, 9 Jun 2002 01:46:47 +0000 Subject: [PATCH] STABLE12-revert-dont-spawn-kernel-thread-for-rxk-listener-20020426 in some cases this causes shutdowns to hang forever. notably shutdown -i0 -g6 -y works while reboot does not (cherry picked from commit fe1beb4f3e69f4ae2dbec60902b60cd601674d15) --- src/rx/rx_kcommon.c | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/src/rx/rx_kcommon.c b/src/rx/rx_kcommon.c index b98118fd7..a8cbde40b 100644 --- a/src/rx/rx_kcommon.c +++ b/src/rx/rx_kcommon.c @@ -998,7 +998,22 @@ int rxk_ReadPacket(osi_socket so, struct rx_packet *p, int *host, int *port) */ int rxk_ListenerPid; /* Used to signal process to wakeup at shutdown */ +#ifdef AFS_SUN5_ENV +/* + * Run the listener as a kernel process. + */ +void rxk_Listener(void) +{ + extern id_t syscid; + void rxk_ListenerProc(void); + if (newproc(rxk_ListenerProc, syscid, 59)) + osi_Panic("rxk_Listener: failed to fork listener process!\n"); +} + +void rxk_ListenerProc(void) +#else /* AFS_SUN5_ENV */ void rxk_Listener(void) +#endif /* AFS_SUN5_ENV */ { struct rx_packet *rxp = NULL; int code; @@ -1013,9 +1028,9 @@ void rxk_Listener(void) #if defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV) rxk_ListenerPid = current_proc()->p_pid; #endif -#if defined(RX_ENABLE_LOCKS) +#if defined(RX_ENABLE_LOCKS) && !defined(AFS_SUN5_ENV) AFS_GUNLOCK(); -#endif /* RX_ENABLE_LOCKS */ +#endif /* RX_ENABLE_LOCKS && !AFS_SUN5_ENV */ while (afs_termState != AFSOP_STOP_RXK_LISTENER) { if (rxp) { @@ -1047,6 +1062,14 @@ void rxk_Listener(void) #if defined(AFS_LINUX22_ENV) || defined(AFS_SUN5_ENV) afs_osi_Wakeup(&rxk_ListenerPid); #endif +#ifdef AFS_SUN5_ENV + AFS_GUNLOCK(); +#ifdef HAVE_P_COREFILE + if (!curproc->p_corefile) /* newproc doesn't set it, but exit frees it */ + curproc->p_corefile = refstr_alloc("core"); +#endif + exit(CLD_EXITED, 0); +#endif /* AFS_SUN5_ENV */ } #if !defined(AFS_LINUX20_ENV) && !defined(AFS_SUN5_ENV) && !defined(AFS_DARWIN_ENV) && !defined(AFS_XBSD_ENV) -- 2.39.5