Skip to content

Commit

Permalink
Get rid of witness in malloc_mutex_t when !(configured w/ debug).
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
interwq committed Feb 24, 2017
1 parent de49674 commit c2323e1
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 14 deletions.
30 changes: 23 additions & 7 deletions include/jemalloc/internal/mutex_structs.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
12 changes: 6 additions & 6 deletions include/jemalloc/internal/mutex_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,25 +7,25 @@ typedef struct malloc_mutex_s malloc_mutex_t;
# define MALLOC_MUTEX_INITIALIZER
#elif (defined(JEMALLOC_OS_UNFAIR_LOCK))
# define MALLOC_MUTEX_INITIALIZER \
{OS_UNFAIR_LOCK_INIT, WITNESS_INITIALIZER("mutex", WITNESS_RANK_OMIT)}
{{{OS_UNFAIR_LOCK_INIT}}, WITNESS_INITIALIZER("mutex", WITNESS_RANK_OMIT)}
#elif (defined(JEMALLOC_OSSPIN))
# define MALLOC_MUTEX_INITIALIZER \
{0, WITNESS_INITIALIZER("mutex", WITNESS_RANK_OMIT)}
{{{0}}, WITNESS_INITIALIZER("mutex", WITNESS_RANK_OMIT)}
#elif (defined(JEMALLOC_MUTEX_INIT_CB))
# define MALLOC_MUTEX_INITIALIZER \
{PTHREAD_MUTEX_INITIALIZER, NULL, \
WITNESS_INITIALIZER("mutex", WITNESS_RANK_OMIT)}
{{{PTHREAD_MUTEX_INITIALIZER, NULL}}, \
WITNESS_INITIALIZER("mutex", WITNESS_RANK_OMIT)}
#else
# if (defined(JEMALLOC_HAVE_PTHREAD_MUTEX_ADAPTIVE_NP) && \
defined(PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP))
# define MALLOC_MUTEX_TYPE PTHREAD_MUTEX_ADAPTIVE_NP
# define MALLOC_MUTEX_INITIALIZER \
{PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP, \
{{{PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP}}, \
WITNESS_INITIALIZER("mutex", WITNESS_RANK_OMIT)}
# else
# define MALLOC_MUTEX_TYPE PTHREAD_MUTEX_DEFAULT
# define MALLOC_MUTEX_INITIALIZER \
{PTHREAD_MUTEX_INITIALIZER, \
{{{PTHREAD_MUTEX_INITIALIZER}}, \
WITNESS_INITIALIZER("mutex", WITNESS_RANK_OMIT)}
# endif
#endif
Expand Down
6 changes: 5 additions & 1 deletion include/jemalloc/internal/witness_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,10 @@ typedef int witness_comp_t (const witness_t *, void *, const witness_t *,
#define WITNESS_RANK_PROF_NEXT_THR_UID WITNESS_RANK_LEAF
#define WITNESS_RANK_PROF_THREAD_ACTIVE_INIT WITNESS_RANK_LEAF

#define WITNESS_INITIALIZER(name, rank) {name, rank, NULL, NULL, {NULL, NULL}}
#if defined(JEMALLOC_DEBUG)
# define WITNESS_INITIALIZER(name, rank) {name, rank, NULL, NULL, {NULL, NULL}}
#else
# define WITNESS_INITIALIZER(name, rank)
#endif

#endif /* JEMALLOC_INTERNAL_WITNESS_TYPES_H */

0 comments on commit c2323e1

Please sign in to comment.