Get rid of witness in malloc_mutex_t when !(configured w/ debug).

We don't touch witness at all when config_debug == false.  Let's only pay the
memory cost in malloc_mutex_s when needed. Note that when !config_debug, we keep
the field in a union so that we don't have to do #ifdefs in multiple places.
This commit is contained in:
Qi Wang 2017-02-23 14:42:52 -08:00 committed by Qi Wang
parent de49674fbd
commit c2323e13a5
3 changed files with 34 additions and 14 deletions

View file

@ -2,23 +2,39 @@
#define JEMALLOC_INTERNAL_MUTEX_STRUCTS_H
struct malloc_mutex_s {
union {
struct {
#ifdef _WIN32
# if _WIN32_WINNT >= 0x0600
SRWLOCK lock;
SRWLOCK lock;
# else
CRITICAL_SECTION lock;
CRITICAL_SECTION lock;
# endif
#elif (defined(JEMALLOC_OS_UNFAIR_LOCK))
os_unfair_lock lock;
os_unfair_lock lock;
#elif (defined(JEMALLOC_OSSPIN))
OSSpinLock lock;
OSSpinLock lock;
#elif (defined(JEMALLOC_MUTEX_INIT_CB))
pthread_mutex_t lock;
malloc_mutex_t *postponed_next;
pthread_mutex_t lock;
malloc_mutex_t *postponed_next;
#else
pthread_mutex_t lock;
pthread_mutex_t lock;
#endif
};
/*
* We only touch witness when configured w/ debug. However we
* keep the field in a union when !debug so that we don't have
* to pollute the code base with #ifdefs, while avoid paying the
* memory cost.
*/
#if !defined(JEMALLOC_DEBUG)
witness_t witness;
#endif
};
#if defined(JEMALLOC_DEBUG)
witness_t witness;
#endif
};
#endif /* JEMALLOC_INTERNAL_MUTEX_STRUCTS_H */