TrinityCore
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
mutex.h
Go to the documentation of this file.
1 /******************************************************************************/
2 #ifdef JEMALLOC_H_TYPES
3 
4 typedef struct malloc_mutex_s malloc_mutex_t;
5 
6 #ifdef _WIN32
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}
12 #else
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}
17 # else
18 # define MALLOC_MUTEX_TYPE PTHREAD_MUTEX_DEFAULT
19 # define MALLOC_MUTEX_INITIALIZER {PTHREAD_MUTEX_INITIALIZER}
20 # endif
21 #endif
22 
23 #endif /* JEMALLOC_H_TYPES */
24 /******************************************************************************/
25 #ifdef JEMALLOC_H_STRUCTS
26 
27 struct malloc_mutex_s {
28 #ifdef _WIN32
29  CRITICAL_SECTION lock;
30 #elif (defined(JEMALLOC_OSSPIN))
31  OSSpinLock lock;
32 #elif (defined(JEMALLOC_MUTEX_INIT_CB))
33  pthread_mutex_t lock;
34  malloc_mutex_t *postponed_next;
35 #else
36  pthread_mutex_t lock;
37 #endif
38 };
39 
40 #endif /* JEMALLOC_H_STRUCTS */
41 /******************************************************************************/
42 #ifdef JEMALLOC_H_EXTERNS
43 
44 #ifdef JEMALLOC_LAZY_LOCK
45 extern bool isthreaded;
46 #else
47 # undef isthreaded /* Undo private_namespace.h definition. */
48 # define isthreaded true
49 #endif
50 
51 bool malloc_mutex_init(malloc_mutex_t *mutex);
52 void malloc_mutex_prefork(malloc_mutex_t *mutex);
53 void malloc_mutex_postfork_parent(malloc_mutex_t *mutex);
54 void malloc_mutex_postfork_child(malloc_mutex_t *mutex);
55 bool mutex_boot(void);
56 
57 #endif /* JEMALLOC_H_EXTERNS */
58 /******************************************************************************/
59 #ifdef JEMALLOC_H_INLINES
60 
61 #ifndef JEMALLOC_ENABLE_INLINE
62 void malloc_mutex_lock(malloc_mutex_t *mutex);
63 void malloc_mutex_unlock(malloc_mutex_t *mutex);
64 #endif
65 
66 #if (defined(JEMALLOC_ENABLE_INLINE) || defined(JEMALLOC_MUTEX_C_))
67 JEMALLOC_INLINE void
68 malloc_mutex_lock(malloc_mutex_t *mutex)
69 {
70 
71  if (isthreaded) {
72 #ifdef _WIN32
73  EnterCriticalSection(&mutex->lock);
74 #elif (defined(JEMALLOC_OSSPIN))
75  OSSpinLockLock(&mutex->lock);
76 #else
77  pthread_mutex_lock(&mutex->lock);
78 #endif
79  }
80 }
81 
82 JEMALLOC_INLINE void
83 malloc_mutex_unlock(malloc_mutex_t *mutex)
84 {
85 
86  if (isthreaded) {
87 #ifdef _WIN32
88  LeaveCriticalSection(&mutex->lock);
89 #elif (defined(JEMALLOC_OSSPIN))
90  OSSpinLockUnlock(&mutex->lock);
91 #else
92  pthread_mutex_unlock(&mutex->lock);
93 #endif
94  }
95 }
96 #endif
97 
98 #endif /* JEMALLOC_H_INLINES */
99 /******************************************************************************/
#define malloc_mutex_lock
Definition: private_namespace.h:237
#define JEMALLOC_INLINE
Definition: jemalloc_internal.h:259
#define malloc_mutex_prefork
Definition: private_namespace.h:240
#define mutex_boot
Definition: private_namespace.h:255
#define malloc_mutex_postfork_parent
Definition: private_namespace.h:239
#define isthreaded
Definition: private_namespace.h:229
#define malloc_mutex_postfork_child
Definition: private_namespace.h:238
#define malloc_mutex_unlock
Definition: private_namespace.h:241
#define malloc_mutex_init
Definition: private_namespace.h:236