mutex.h revision 4e2e3dd9cf19ed5991938a708a8b50611aa5bbf8
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# ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP 10# define MALLOC_MUTEX_INITIALIZER PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP 11# else 12# define MALLOC_MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER 13# endif 14#endif 15 16#endif /* JEMALLOC_H_TYPES */ 17/******************************************************************************/ 18#ifdef JEMALLOC_H_STRUCTS 19 20#endif /* JEMALLOC_H_STRUCTS */ 21/******************************************************************************/ 22#ifdef JEMALLOC_H_EXTERNS 23 24#ifdef JEMALLOC_LAZY_LOCK 25extern bool isthreaded; 26#else 27# define isthreaded true 28#endif 29 30bool malloc_mutex_init(malloc_mutex_t *mutex); 31void malloc_mutex_destroy(malloc_mutex_t *mutex); 32void malloc_mutex_prefork(malloc_mutex_t *mutex); 33void malloc_mutex_postfork_parent(malloc_mutex_t *mutex); 34void malloc_mutex_postfork_child(malloc_mutex_t *mutex); 35 36#endif /* JEMALLOC_H_EXTERNS */ 37/******************************************************************************/ 38#ifdef JEMALLOC_H_INLINES 39 40#ifndef JEMALLOC_ENABLE_INLINE 41void malloc_mutex_lock(malloc_mutex_t *mutex); 42bool malloc_mutex_trylock(malloc_mutex_t *mutex); 43void malloc_mutex_unlock(malloc_mutex_t *mutex); 44#endif 45 46#if (defined(JEMALLOC_ENABLE_INLINE) || defined(JEMALLOC_MUTEX_C_)) 47JEMALLOC_INLINE void 48malloc_mutex_lock(malloc_mutex_t *mutex) 49{ 50 51 if (isthreaded) { 52#ifdef JEMALLOC_OSSPIN 53 OSSpinLockLock(mutex); 54#else 55 pthread_mutex_lock(mutex); 56#endif 57 } 58} 59 60JEMALLOC_INLINE bool 61malloc_mutex_trylock(malloc_mutex_t *mutex) 62{ 63 64 if (isthreaded) { 65#ifdef JEMALLOC_OSSPIN 66 return (OSSpinLockTry(mutex) == false); 67#else 68 return (pthread_mutex_trylock(mutex) != 0); 69#endif 70 } else 71 return (false); 72} 73 74JEMALLOC_INLINE void 75malloc_mutex_unlock(malloc_mutex_t *mutex) 76{ 77 78 if (isthreaded) { 79#ifdef JEMALLOC_OSSPIN 80 OSSpinLockUnlock(mutex); 81#else 82 pthread_mutex_unlock(mutex); 83#endif 84 } 85} 86#endif 87 88#endif /* JEMALLOC_H_INLINES */ 89/******************************************************************************/ 90