Modified: trunk/src/semaphore.c (83 => 84)
--- trunk/src/semaphore.c 2009-11-02 11:27:33 UTC (rev 83)
+++ trunk/src/semaphore.c 2009-11-02 11:38:43 UTC (rev 84)
@@ -86,6 +86,9 @@
dispatch_semaphore_create(long value)
{
dispatch_semaphore_t dsema;
+#if USE_POSIX_SEM
+ int ret;
+#endif
// If the internal value is negative, then the absolute of the value is
// equal to the number of waiting threads. Therefore it is bogus to
@@ -104,6 +107,10 @@
dsema->do_targetq = dispatch_get_global_queue(0, 0);
dsema->dsema_value = value;
dsema->dsema_orig = value;
+#if USE_POSIX_SEM
+ ret = sem_init(&dsema->dsema_sem, 0, 0);
+ dispatch_assume_zero(ret);
+#endif
}
return dsema;
@@ -140,21 +147,7 @@
_dispatch_safe_fork = false;
}
#endif
-#if USE_POSIX_SEM
-static void
-_dispatch_posix_semaphore_create(sem_t *s4)
-{
- int ret;
- if (*s4) {
- return;
- }
-
- ret = sem_init(s4, 0, 0);
- dispatch_assume_zero(ret);
-}
-#endif
-
DISPATCH_NOINLINE
static long
_dispatch_semaphore_wait_slow(dispatch_semaphore_t dsema, dispatch_time_t timeout)
@@ -183,9 +176,6 @@
#if USE_MACH_SEM
_dispatch_semaphore_create_port(&dsema->dsema_port);
#endif
-#if USE_POSIX_SEM
- _dispatch_posix_semaphore_create(&dsema->dsema_sem);
-#endif
// From xnu/osfmk/kern/sync_sema.c:
// wait_semaphore->count = -1; /* we don't keep an actual count */