From 176db21733a566a44f16d57242021d5d4979092b Mon Sep 17 00:00:00 2001 From: Poul T Lomholt Date: Mon, 14 Jan 2019 16:23:25 -0800 Subject: [PATCH] openbsd: switch to libuv's barrier implementation On OpenBSD 6.4 x86_64 the barrier_serial_thread test fails due to OpenBSD's pthread_barrier_wait() implementation returning PTHREAD_BARRIER_SERIAL_THREAD from the first thread that releases the wait. Switch to libuv's internal implementation to address the issue. Fixes: https://github.com/libuv/libuv/issues/2145 PR-URL: https://github.com/libuv/libuv/pull/2144 Reviewed-By: Ben Noordhuis --- include/uv/unix.h | 4 +++- src/unix/thread.c | 6 ++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/include/uv/unix.h b/include/uv/unix.h index 9de9efec..d887d721 100644 --- a/include/uv/unix.h +++ b/include/uv/unix.h @@ -136,7 +136,9 @@ typedef pthread_cond_t uv_cond_t; typedef pthread_key_t uv_key_t; /* Note: guard clauses should match uv_barrier_init's in src/unix/thread.c. */ -#if defined(_AIX) || !defined(PTHREAD_BARRIER_SERIAL_THREAD) +#if defined(_AIX) || \ + defined(__OpenBSD__) || \ + !defined(PTHREAD_BARRIER_SERIAL_THREAD) /* TODO(bnoordhuis) Merge into uv_barrier_t in v2. */ struct _uv_barrier { uv_mutex_t mutex; diff --git a/src/unix/thread.c b/src/unix/thread.c index 29004707..8bcb8576 100644 --- a/src/unix/thread.c +++ b/src/unix/thread.c @@ -48,8 +48,10 @@ STATIC_ASSERT(sizeof(uv_barrier_t) == sizeof(pthread_barrier_t)); #endif -/* Note: guard clauses should match uv_barrier_t's in include/uv/uv-unix.h. */ -#if defined(_AIX) || !defined(PTHREAD_BARRIER_SERIAL_THREAD) +/* Note: guard clauses should match uv_barrier_t's in include/uv/unix.h. */ +#if defined(_AIX) || \ + defined(__OpenBSD__) || \ + !defined(PTHREAD_BARRIER_SERIAL_THREAD) int uv_barrier_init(uv_barrier_t* barrier, unsigned int count) { struct _uv_barrier* b; int rc;