mutex.h revision 1e6138c88c7f3bb1f0e8fb785080ac5abc24210c
1/******************************************************************************/ 2#ifdef JEMALLOC_H_TYPES 3 4#ifdef JEMALLOC_OSSPIN 5typedef OSSpinLock malloc_mutex_t; 6#define MALLOC_MUTEX_INITIALIZER 0 7#else 8typedef pthread_mutex_t malloc_mutex_t; 9# if (defined(PTHREAD_MUTEX_ADAPTIVE_NP) && \ 10 defined(PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP)) 11# define MALLOC_MUTEX_TYPE PTHREAD_MUTEX_ADAPTIVE_NP 12# define MALLOC_MUTEX_INITIALIZER PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP 13# else 14# define MALLOC_MUTEX_TYPE PTHREAD_MUTEX_DEFAULT 15# define MALLOC_MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER 16# endif 17#endif 18 19#endif /* JEMALLOC_H_TYPES */ 20/******************************************************************************/ 21#ifdef JEMALLOC_H_STRUCTS 22 23#endif /* JEMALLOC_H_STRUCTS */ 24/******************************************************************************/ 25#ifdef JEMALLOC_H_EXTERNS 26 27#ifdef JEMALLOC_LAZY_LOCK 28extern bool isthreaded; 29#else 30# define isthreaded true 31#endif 32 33bool malloc_mutex_init(malloc_mutex_t *mutex); 34void malloc_mutex_prefork(malloc_mutex_t *mutex); 35void malloc_mutex_postfork_parent(malloc_mutex_t *mutex); 36void malloc_mutex_postfork_child(malloc_mutex_t *mutex); 37 38#endif /* JEMALLOC_H_EXTERNS */ 39/******************************************************************************/ 40#ifdef JEMALLOC_H_INLINES 41 42#ifndef JEMALLOC_ENABLE_INLINE 43void malloc_mutex_lock(malloc_mutex_t *mutex); 44void malloc_mutex_unlock(malloc_mutex_t *mutex); 45#endif 46 47#if (defined(JEMALLOC_ENABLE_INLINE) || defined(JEMALLOC_MUTEX_C_)) 48JEMALLOC_INLINE void 49malloc_mutex_lock(malloc_mutex_t *mutex) 50{ 51 52 if (isthreaded) { 53#ifdef JEMALLOC_OSSPIN 54 OSSpinLockLock(mutex); 55#else 56 pthread_mutex_lock(mutex); 57#endif 58 } 59} 60 61JEMALLOC_INLINE void 62malloc_mutex_unlock(malloc_mutex_t *mutex) 63{ 64 65 if (isthreaded) { 66#ifdef JEMALLOC_OSSPIN 67 OSSpinLockUnlock(mutex); 68#else 69 pthread_mutex_unlock(mutex); 70#endif 71 } 72} 73#endif 74 75#endif /* JEMALLOC_H_INLINES */ 76/******************************************************************************/ 77