From 8a455421b8765ebce3176afa7b35a5fa82209ae2 Mon Sep 17 00:00:00 2001 From: Ivan Maidanski Date: Wed, 7 Mar 2018 01:24:05 +0300 Subject: [PATCH] Workaround sem_wait failure in pthread_create on Haiku 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. --- pthread_support.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pthread_support.c b/pthread_support.c index c12d823..51b4a2b 100644 --- a/pthread_support.c +++ b/pthread_support.c @@ -1897,6 +1897,10 @@ GC_INNER_PTHRSTART GC_thread GC_start_rtn_prepare_thread( 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); -- 2.7.4