From: Derrick Brashear Date: Tue, 5 Jan 2010 06:50:49 +0000 (-0500) Subject: darwin rxevent sleep instead of polling X-Git-Tag: openafs-devel-1_5_72~8 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=fe246be823772262eb7f89415d5b8fb11798dc42;p=packages%2Fo%2Fopenafs.git 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 --- diff --git a/src/rx/rx_kcommon.c b/src/rx/rx_kcommon.c index 62cd6a1ca..7aa71a964 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 63fd71ede..b6ac7f4cf 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