Index: /trunk/ccl/lisp-kernel/thread_manager.c
===================================================================
--- /trunk/ccl/lisp-kernel/thread_manager.c	(revision 5069)
+++ /trunk/ccl/lisp-kernel/thread_manager.c	(revision 5070)
@@ -180,5 +180,14 @@
 
   do {
-    status = SEM_WAIT(s);
+#ifdef USE_MACH_SEMAPHORES
+    mach_timespec_t q = {1,0};
+    status = SEM_TIMEDWAIT(s,q);
+#endif
+#ifdef USE_POSIX_SEMAPHORES
+    struct timespec q;
+    gettimeofday((struct timeval *)&q, NULL);
+    q.tv_sec += 1;
+    status = SEM_TIMEDWAIT(s,&q);
+#endif
   } while (status != 0);
 }
@@ -207,5 +216,5 @@
   return status;
 #endif
-#ifdef DARWIN  
+#ifdef USE_MACH_SEMAPHORES
   mach_timespec_t q = {seconds, nanos};
   int status = SEM_TIMEDWAIT(s, q);
@@ -342,10 +351,10 @@
 new_semaphore(int count)
 {
-#if defined(LINUX) || defined(FREEBSD)
+#ifdef USE_POSIX_SEMAPHORES
   sem_t *s = malloc(sizeof(sem_t));
   sem_init(s, 0, count);
   return s;
 #endif
-#ifdef DARWIN
+#ifdef USE_MACH_SEMAPHORES
   semaphore_t s = (semaphore_t)0;
   semaphore_create(mach_task_self(),&s, SYNC_POLICY_FIFO, count);
@@ -384,8 +393,8 @@
 {
   if (*s) {
-#if defined(LINUX) || defined(FREEBSD)
+#ifdef USE_POSIX_SEMAPHORES
     sem_destroy((sem_t *)*s);
 #endif
-#ifdef DARWIN
+#ifdef USE_MACH_SEMAPHORES
     semaphore_destroy(mach_task_self(),((semaphore_t)(natural) *s));
 #endif
@@ -948,10 +957,4 @@
 	 to a dead thread by setting tcr->osid to 0.
       */
-#ifdef DARWIN
-      if (mach_suspend_tcr(tcr)) {
-        SET_TCR_FLAG(tcr,TCR_FLAG_BIT_ALT_SUSPEND);
-	return true;
-      }
-#endif
       tcr->osid = 0;
       return false;
