From fe246be823772262eb7f89415d5b8fb11798dc42 Mon Sep 17 00:00:00 2001 From: Derrick Brashear Date: Tue, 5 Jan 2010 01:50:49 -0500 Subject: [PATCH] darwin rxevent sleep instead of polling use an interruptible sleep (and wakeups on shutdown or schedule) instead of polling, on macos Change-Id: I25934efac63ccaf9015f79c6711d09c693f0ad51 Reviewed-on: http://gerrit.openafs.org/1066 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- src/rx/rx_kcommon.c | 19 +++++++++++++++++++ src/rx/rx_kernel.h | 2 ++ 2 files changed, 21 insertions(+) diff --git a/src/rx/rx_kcommon.c b/src/rx/rx_kcommon.c index 62cd6a1..7aa71a9 100644 --- a/src/rx/rx_kcommon.c +++ b/src/rx/rx_kcommon.c @@ -1074,6 +1074,20 @@ rxk_FreeSocket(struct socket *asocket) #endif /* !SUN5 && !LINUX20 */ #if defined(RXK_LISTENER_ENV) || defined(AFS_SUN5_ENV) +#ifdef AFS_DARWIN80_ENV +/* Shutting down should wake us up, as should an earlier event. */ +void +rxi_ReScheduleEvents(void) +{ + /* needed to allow startup */ + int glock = ISAFS_GLOCK(); + if (!glock) + AFS_GLOCK(); + osi_rxWakeup(&afs_termState); + if (!glock) + AFS_GUNLOCK(); +} +#endif /* * Run RX event daemon every second (5 times faster than rest of systems) */ @@ -1097,7 +1111,12 @@ afs_rxevent_daemon(void) afs_Trace1(afs_iclSetp, CM_TRACE_TIMESTAMP, ICL_TYPE_STRING, "before afs_osi_Wait()"); #endif +#ifdef AFS_DARWIN80_ENV + afs_osi_TimedSleep(&afs_termState, ((temp.sec * 1000) + + (temp.usec / 1000)), 0); +#else afs_osi_Wait(500, NULL, 0); +#endif #ifdef RX_KERNEL_TRACE afs_Trace1(afs_iclSetp, CM_TRACE_TIMESTAMP, ICL_TYPE_STRING, "after afs_osi_Wait()"); diff --git a/src/rx/rx_kernel.h b/src/rx/rx_kernel.h index 63fd71e..b6ac7f4 100644 --- a/src/rx/rx_kernel.h +++ b/src/rx/rx_kernel.h @@ -15,7 +15,9 @@ #define osi_Alloc afs_osi_Alloc #define osi_Free afs_osi_Free +#ifndef AFS_DARWIN80_ENV #define rxi_ReScheduleEvents 0 /* Not needed by kernel */ +#endif /* This is a no-op, because the kernel server procs are pre-allocated */ #define rxi_StartServerProcs(x) (void)0 -- 1.9.4