index | | raw e-mail
diff --git a/cddl/contrib/opensolaris/tools/ctf/cvt/barrier.c b/cddl/contrib/opensolaris/tools/ctf/cvt/barrier.c
index c0719620dbde..e1f54e994ce3 100644
--- a/cddl/contrib/opensolaris/tools/ctf/cvt/barrier.c
+++ b/cddl/contrib/opensolaris/tools/ctf/cvt/barrier.c
@@ -38,9 +38,6 @@
*/
#include <pthread.h>
-#ifdef illumos
-#include <synch.h>
-#endif
#include <stdio.h>
#include "barrier.h"
@@ -49,12 +46,7 @@ void
barrier_init(barrier_t *bar, int nthreads)
{
pthread_mutex_init(&bar->bar_lock, NULL);
-#ifdef illumos
- sema_init(&bar->bar_sem, 0, USYNC_THREAD, NULL);
-#else
- sem_init(&bar->bar_sem, 0, 0);
-#endif
-
+ pthread_cond_init(&bar->bar_cv, NULL);
bar->bar_numin = 0;
bar->bar_nthr = nthreads;
}
@@ -65,26 +57,14 @@ barrier_wait(barrier_t *bar)
pthread_mutex_lock(&bar->bar_lock);
if (++bar->bar_numin < bar->bar_nthr) {
+ pthread_cond_wait(&bar->bar_cv, &bar->bar_lock);
pthread_mutex_unlock(&bar->bar_lock);
-#ifdef illumos
- sema_wait(&bar->bar_sem);
-#else
- sem_wait(&bar->bar_sem);
-#endif
return (0);
-
} else {
- int i;
-
/* reset for next use */
bar->bar_numin = 0;
- for (i = 1; i < bar->bar_nthr; i++)
-#ifdef illumos
- sema_post(&bar->bar_sem);
-#else
- sem_post(&bar->bar_sem);
-#endif
+ pthread_cond_broadcast(&bar->bar_cv);
pthread_mutex_unlock(&bar->bar_lock);
return (1);
diff --git a/cddl/contrib/opensolaris/tools/ctf/cvt/barrier.h b/cddl/contrib/opensolaris/tools/ctf/cvt/barrier.h
index babf2e64e33f..138386f8ed46 100644
--- a/cddl/contrib/opensolaris/tools/ctf/cvt/barrier.h
+++ b/cddl/contrib/opensolaris/tools/ctf/cvt/barrier.h
@@ -33,12 +33,7 @@
* APIs for the barrier synchronization primitive.
*/
-#ifdef illumos
-#include <synch.h>
-#else
-#include <semaphore.h>
-typedef sem_t sema_t;
-#endif
+#include <pthread.h>
#ifdef __cplusplus
extern "C" {
@@ -48,7 +43,7 @@ typedef struct barrier {
pthread_mutex_t bar_lock; /* protects bar_numin */
int bar_numin; /* current number of waiters */
- sema_t bar_sem; /* where everyone waits */
+ pthread_cond_t bar_cv; /* where everyone waits */
int bar_nthr; /* # of waiters to trigger release */
} barrier_t;
help
