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