Skip site navigation (1)Skip section navigation (2)


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