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