1 /******************************************************************************/
2 #ifdef JEMALLOC_H_TYPES
4 typedef struct malloc_mutex_s malloc_mutex_t;
7 # define MALLOC_MUTEX_INITIALIZER
8 #elif (defined(JEMALLOC_OSSPIN))
9 # define MALLOC_MUTEX_INITIALIZER {0}
10 #elif (defined(JEMALLOC_MUTEX_INIT_CB))
11 # define MALLOC_MUTEX_INITIALIZER {PTHREAD_MUTEX_INITIALIZER, NULL}
13 # if (defined(PTHREAD_MUTEX_ADAPTIVE_NP) && \
14 defined(PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP))
15 # define MALLOC_MUTEX_TYPE PTHREAD_MUTEX_ADAPTIVE_NP
16 # define MALLOC_MUTEX_INITIALIZER {PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP}
18 # define MALLOC_MUTEX_TYPE PTHREAD_MUTEX_DEFAULT
19 # define MALLOC_MUTEX_INITIALIZER {PTHREAD_MUTEX_INITIALIZER}
23 #endif /* JEMALLOC_H_TYPES */
24 /******************************************************************************/
25 #ifdef JEMALLOC_H_STRUCTS
27 struct malloc_mutex_s {
29 CRITICAL_SECTION lock;
30 #elif (defined(JEMALLOC_OSSPIN))
32 #elif (defined(JEMALLOC_MUTEX_INIT_CB))
34 malloc_mutex_t *postponed_next;
40 #endif /* JEMALLOC_H_STRUCTS */
41 /******************************************************************************/
42 #ifdef JEMALLOC_H_EXTERNS
44 #ifdef JEMALLOC_LAZY_LOCK
45 extern bool isthreaded;
48 bool malloc_mutex_init(malloc_mutex_t *mutex);
49 void malloc_mutex_prefork(malloc_mutex_t *mutex);
50 void malloc_mutex_postfork_parent(malloc_mutex_t *mutex);
51 void malloc_mutex_postfork_child(malloc_mutex_t *mutex);
52 bool mutex_boot(void);
54 #endif /* JEMALLOC_H_EXTERNS */
55 /******************************************************************************/
56 #ifdef JEMALLOC_H_INLINES
58 #ifndef JEMALLOC_ENABLE_INLINE
59 void malloc_mutex_lock(malloc_mutex_t *mutex);
60 void malloc_mutex_unlock(malloc_mutex_t *mutex);
63 #if (defined(JEMALLOC_ENABLE_INLINE) || defined(JEMALLOC_MUTEX_C_))
65 malloc_mutex_lock(malloc_mutex_t *mutex)
70 EnterCriticalSection(&mutex->lock);
71 #elif (defined(JEMALLOC_OSSPIN))
72 OSSpinLockLock(&mutex->lock);
74 pthread_mutex_lock(&mutex->lock);
80 malloc_mutex_unlock(malloc_mutex_t *mutex)
85 LeaveCriticalSection(&mutex->lock);
86 #elif (defined(JEMALLOC_OSSPIN))
87 OSSpinLockUnlock(&mutex->lock);
89 pthread_mutex_unlock(&mutex->lock);
95 #endif /* JEMALLOC_H_INLINES */
96 /******************************************************************************/