mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-09-01 06:55:30 +00:00
Merge branch 'ondrej/use-pthread_barrier-if-available' into 'main'
Prefer the pthread_barrier implementation over uv_barrier See merge request isc-projects/bind9!7348
This commit is contained in:
@@ -508,7 +508,7 @@ LIBS="$PTHREAD_LIBS $LIBS"
|
|||||||
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
||||||
CC="$PTHREAD_CC"
|
CC="$PTHREAD_CC"
|
||||||
|
|
||||||
AC_CHECK_FUNCS([pthread_attr_getstacksize pthread_attr_setstacksize])
|
AC_CHECK_FUNCS([pthread_attr_getstacksize pthread_attr_setstacksize pthread_barrier_init])
|
||||||
|
|
||||||
# [pairwise: --with-locktype=adaptive, --with-locktype=standard]
|
# [pairwise: --with-locktype=adaptive, --with-locktype=standard]
|
||||||
AC_ARG_WITH([locktype],
|
AC_ARG_WITH([locktype],
|
||||||
|
@@ -15,24 +15,53 @@
|
|||||||
|
|
||||||
#include <isc/util.h>
|
#include <isc/util.h>
|
||||||
|
|
||||||
#if __SANITIZE_THREAD__
|
#if HAVE_PTHREAD_BARRIER_INIT
|
||||||
|
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
|
|
||||||
#define isc_barrier_t pthread_barrier_t
|
#if ISC_TRACK_PTHREADS_OBJECTS
|
||||||
|
typedef pthread_barrier_t *isc_barrier_t;
|
||||||
|
#else
|
||||||
|
typedef pthread_barrier_t isc_barrier_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
#define isc_barrier_init(barrier, count) \
|
#define isc__barrier_init(bp, count) \
|
||||||
pthread_barrier_init(barrier, NULL, count)
|
{ \
|
||||||
#define isc_barrier_destroy(barrier) pthread_barrier_destroy(barrier)
|
int _ret = pthread_barrier_init(bp, NULL, count); \
|
||||||
#define isc_barrier_wait(barrier) pthread_barrier_wait(barrier)
|
PTHREADS_RUNTIME_CHECK(pthread_barrier_init, _ret); \
|
||||||
|
}
|
||||||
|
|
||||||
#else /* __SANITIZE_THREAD__ */
|
#define isc__barrier_wait(bp) pthread_barrier_wait(bp)
|
||||||
|
|
||||||
#include <isc/uv.h>
|
#define isc__barrier_destroy(bp) \
|
||||||
|
{ \
|
||||||
|
int _ret = pthread_barrier_destroy(bp); \
|
||||||
|
PTHREADS_RUNTIME_CHECK(pthread_barrier_destroy, _ret); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#include <uv.h>
|
||||||
|
|
||||||
#if ISC_TRACK_PTHREADS_OBJECTS
|
#if ISC_TRACK_PTHREADS_OBJECTS
|
||||||
|
|
||||||
typedef uv_barrier_t *isc_barrier_t;
|
typedef uv_barrier_t *isc_barrier_t;
|
||||||
|
#else
|
||||||
|
typedef uv_barrier_t isc_barrier_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define isc__barrier_init(bp, count) \
|
||||||
|
{ \
|
||||||
|
int _ret = uv_barrier_init(bp, count); \
|
||||||
|
UV_RUNTIME_CHECK(uv_barrier_init, _ret); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define isc__barrier_wait(bp) uv_barrier_wait(bp)
|
||||||
|
|
||||||
|
#define isc__barrier_destroy(bp) uv_barrier_destroy(bp)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if ISC_TRACK_PTHREADS_OBJECTS
|
||||||
|
|
||||||
#define isc_barrier_init(bp, count) \
|
#define isc_barrier_init(bp, count) \
|
||||||
{ \
|
{ \
|
||||||
@@ -48,22 +77,8 @@ typedef uv_barrier_t *isc_barrier_t;
|
|||||||
|
|
||||||
#else /* ISC_TRACK_PTHREADS_OBJECTS */
|
#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_init(bp, count) isc__barrier_init(bp, count)
|
||||||
#define isc_barrier_wait(bp) isc__barrier_wait(bp)
|
#define isc_barrier_wait(bp) isc__barrier_wait(bp)
|
||||||
#define isc_barrier_destroy(bp) isc__barrier_destroy(bp)
|
#define isc_barrier_destroy(bp) isc__barrier_destroy(bp)
|
||||||
|
|
||||||
#endif /* ISC_TRACK_PTHREADS_OBJECTS */
|
#endif /* ISC_TRACK_PTHREADS_OBJECTS */
|
||||||
|
|
||||||
#define isc__barrier_init(bp, count) \
|
|
||||||
{ \
|
|
||||||
int _ret = uv_barrier_init(bp, count); \
|
|
||||||
UV_RUNTIME_CHECK(uv_barrier_init, _ret); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define isc__barrier_wait(bp) uv_barrier_wait(bp)
|
|
||||||
|
|
||||||
#define isc__barrier_destroy(bp) uv_barrier_destroy(bp)
|
|
||||||
|
|
||||||
#endif /* __SANITIZE_THREAD__ */
|
|
||||||
|
Reference in New Issue
Block a user