mutex.h revision 7427525c28d58c423a68930160e3b0fe577fe953
1e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************/
2e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifdef JEMALLOC_H_TYPES
3e9629bad30a9f478b336ab46b8e6e02f7f87af46Evan Chu
4e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifdef JEMALLOC_OSSPIN
5e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef OSSpinLock malloc_mutex_t;
6e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#else
7e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef pthread_mutex_t malloc_mutex_t;
8e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
9e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
10e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
11e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#  define MALLOC_MUTEX_INITIALIZER PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
12e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#else
13e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#  define MALLOC_MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER
14e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
15e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
16e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* JEMALLOC_H_TYPES */
17e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************/
18e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifdef JEMALLOC_H_STRUCTS
195c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen
20e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* JEMALLOC_H_STRUCTS */
21e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************/
22e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifdef JEMALLOC_H_EXTERNS
23e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
24e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifdef JEMALLOC_LAZY_LOCK
25e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectextern bool isthreaded;
26e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#else
27e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#  define isthreaded true
28e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
29e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
30e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectbool	malloc_mutex_init(malloc_mutex_t *mutex);
31e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid	malloc_mutex_destroy(malloc_mutex_t *mutex);
32e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
33e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* JEMALLOC_H_EXTERNS */
34e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************/
35e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifdef JEMALLOC_H_INLINES
36e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
37e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef JEMALLOC_ENABLE_INLINE
38e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid	malloc_mutex_lock(malloc_mutex_t *mutex);
39e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectbool	malloc_mutex_trylock(malloc_mutex_t *mutex);
40e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid	malloc_mutex_unlock(malloc_mutex_t *mutex);
41e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
42e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
43e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (defined(JEMALLOC_ENABLE_INLINE) || defined(JEMALLOC_MUTEX_C_))
44e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectJEMALLOC_INLINE void
45e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectmalloc_mutex_lock(malloc_mutex_t *mutex)
46e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
47e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
48e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	if (isthreaded) {
49e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifdef JEMALLOC_OSSPIN
50e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project		OSSpinLockLock(mutex);
51e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#else
52e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project		pthread_mutex_lock(mutex);
53e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
54e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	}
55e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
56e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
57e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectJEMALLOC_INLINE bool
58e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectmalloc_mutex_trylock(malloc_mutex_t *mutex)
59e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
60e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
61e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	if (isthreaded) {
62e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifdef JEMALLOC_OSSPIN
63e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project		return (OSSpinLockTry(mutex) == false);
64e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#else
65e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project		return (pthread_mutex_trylock(mutex) != 0);
66e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
67e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	} else
68e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project		return (false);
69e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
70e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
71e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectJEMALLOC_INLINE void
72e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectmalloc_mutex_unlock(malloc_mutex_t *mutex)
73e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
74e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
75e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	if (isthreaded) {
76e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifdef JEMALLOC_OSSPIN
77e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project		OSSpinLockUnlock(mutex);
78e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#else
79e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project		pthread_mutex_unlock(mutex);
80e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
81e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	}
82e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
83e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
84e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
85e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* JEMALLOC_H_INLINES */
86e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************/
87e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project