darwin rxevent sleep instead of polling
authorDerrick Brashear <shadow@dementia.org>
Tue, 5 Jan 2010 06:50:49 +0000 (01:50 -0500)
committerDerrick Brashear <shadow@dementia.org>
Tue, 9 Feb 2010 20:53:07 +0000 (12:53 -0800)
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 <shadow@dementia.org>
Tested-by: Derrick Brashear <shadow@dementia.org>

src/rx/rx_kcommon.c
src/rx/rx_kernel.h

index 62cd6a1..7aa71a9 100644 (file)
@@ -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()");
index 63fd71e..b6ac7f4 100644 (file)
@@ -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