Issue #97 (bdwgc).
sem_wait() fails because of some bug in Haiku OS (as of hrev51798).
* pthread_support.c [GC_HAIKU_THREADS] (WRAP_FUNC(pthread_create)):
If errno is EACCES then just retry sem_wait instead of ABORT.
DISABLE_CANCEL(cancel_state);
/* pthread_create is not a cancellation point. */
while (0 != sem_wait(&(si -> registered))) {
+# if defined(GC_HAIKU_THREADS)
+ /* To workaround some bug in Haiku semaphores. */
+ if (EACCES == errno) continue;
+# endif
if (EINTR != errno) ABORT("sem_wait failed");
}
RESTORE_CANCEL(cancel_state);