]> granicus.if.org Git - gc/commitdiff
Workaround sem_wait failure in pthread_create on Haiku
authorIvan Maidanski <ivmai@mail.ru>
Tue, 6 Mar 2018 22:24:05 +0000 (01:24 +0300)
committerIvan Maidanski <ivmai@mail.ru>
Tue, 17 Apr 2018 20:06:07 +0000 (23:06 +0300)
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

index f0b8e929d224773657edfb71b7d5e9b9e2b63b9c..969f477a1a9c09cc337db6902fa77d9679075ee4 100644 (file)
@@ -1876,6 +1876,10 @@ GC_API int WRAP_FUNC(pthread_create)(pthread_t *new_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);