diff --git a/lib/common/threading.h b/lib/common/threading.h index d806c89d01c..e61ef0ff992 100644 --- a/lib/common/threading.h +++ b/lib/common/threading.h @@ -13,6 +13,8 @@ #ifndef THREADING_H_938743 #define THREADING_H_938743 +#include "debug.h" + #if defined (__cplusplus) extern "C" { #endif @@ -75,10 +77,12 @@ int ZSTD_pthread_join(ZSTD_pthread_t thread, void** value_ptr); */ -#elif defined(ZSTD_MULTITHREAD) /* posix assumed ; need a better detection method */ +#elif defined(ZSTD_MULTITHREAD) /* posix assumed ; need a better detection method */ /* === POSIX Systems === */ # include +#if DEBUGLEVEL < 1 + #define ZSTD_pthread_mutex_t pthread_mutex_t #define ZSTD_pthread_mutex_init(a, b) pthread_mutex_init((a), (b)) #define ZSTD_pthread_mutex_destroy(a) pthread_mutex_destroy((a)) @@ -96,6 +100,31 @@ int ZSTD_pthread_join(ZSTD_pthread_t thread, void** value_ptr); #define ZSTD_pthread_create(a, b, c, d) pthread_create((a), (b), (c), (d)) #define ZSTD_pthread_join(a, b) pthread_join((a),(b)) +#else /* DEBUGLEVEL >= 1 */ + +#include + +/* Use pointers for mutex/cond so we are alerted if we leak them. */ + +#define ZSTD_pthread_mutex_t pthread_mutex_t* +#define ZSTD_pthread_mutex_init(a, b) (*(a) = (pthread_mutex_t*)malloc(sizeof(pthread_mutex_t)), *(a) ? pthread_mutex_init(*(a), (b)) : 1) +#define ZSTD_pthread_mutex_destroy(a) (pthread_mutex_destroy(*(a)), free(*(a))) +#define ZSTD_pthread_mutex_lock(a) pthread_mutex_lock(*(a)) +#define ZSTD_pthread_mutex_unlock(a) pthread_mutex_unlock(*(a)) + +#define ZSTD_pthread_cond_t pthread_cond_t* +#define ZSTD_pthread_cond_init(a, b) (*(a) = (pthread_cond_t*)malloc(sizeof(pthread_cond_t)), *(a) ? pthread_cond_init(*(a), (b)) : 1) +#define ZSTD_pthread_cond_destroy(a) (pthread_cond_destroy(*(a)), free(*(a))) +#define ZSTD_pthread_cond_wait(a, b) pthread_cond_wait(*(a), *(b)) +#define ZSTD_pthread_cond_signal(a) pthread_cond_signal(*(a)) +#define ZSTD_pthread_cond_broadcast(a) pthread_cond_broadcast(*(a)) + +#define ZSTD_pthread_t pthread_t +#define ZSTD_pthread_create(a, b, c, d) pthread_create((a), (b), (c), (d)) +#define ZSTD_pthread_join(a, b) pthread_join((a),(b)) + +#endif + #else /* ZSTD_MULTITHREAD not defined */ /* No multithreading support */