diff --git a/lib/isc/include/isc/barrier.h b/lib/isc/include/isc/barrier.h index 74e6327681..20bfdab0ac 100644 --- a/lib/isc/include/isc/barrier.h +++ b/lib/isc/include/isc/barrier.h @@ -26,14 +26,38 @@ #define isc_barrier_destroy(barrier) pthread_barrier_destroy(barrier) #define isc_barrier_wait(barrier) pthread_barrier_wait(barrier) -#else +#else /* __SANITIZE_THREAD__ */ #include -#define isc_barrier_t uv_barrier_t +#if ISC_TRACK_PTHREADS_OBJECTS -#define isc_barrier_init(barrier, count) uv_barrier_init(barrier, count) -#define isc_barrier_destroy(barrier) uv_barrier_destroy(barrier) -#define isc_barrier_wait(barrier) uv_barrier_wait(barrier) +typedef uv_barrier_t *isc_barrier_t; + +#define isc_barrier_init(bp, count) \ + { \ + *bp = malloc(sizeof(**bp)); \ + isc__barrier_init(*bp, count); \ + } +#define isc_barrier_wait(bp) isc__barrier_wait(*bp) +#define isc_barrier_destroy(bp) \ + { \ + isc__barrier_destroy(*bp); \ + free(*bp); \ + } + +#else /* ISC_TRACK_PTHREADS_OBJECTS */ + +typedef uv_barrier_t isc_barrier_t; + +#define isc_barrier_init(bp, count) isc__barrier_init(bp, count) +#define isc_barrier_wait(bp) isc__barrier_wait(bp) +#define isc_barrier_destroy(bp) isc__barrier_destroy(bp) + +#endif /* ISC_TRACK_PTHREADS_OBJECTS */ + +#define isc__barrier_init(bp, count) uv_barrier_init(bp, count) +#define isc__barrier_wait(bp) uv_barrier_wait(bp) +#define isc__barrier_destroy(bp) uv_barrier_destroy(bp) #endif /* __SANITIZE_THREAD__ */