summaryrefslogtreecommitdiffstats
path: root/include/jemalloc
diff options
context:
space:
mode:
authorQi Wang <interwq@gwu.edu>2017-02-23 22:42:52 (GMT)
committerQi Wang <interwq@gmail.com>2017-02-24 17:41:29 (GMT)
commitc2323e13a5eec70f554e532336a912a9cd78317a (patch)
tree5ac234dfe75dc08d00152658db13e48908bffd88 /include/jemalloc
parentde49674fbde4d124a0a7e7e97f5656e190980759 (diff)
downloadjemalloc-c2323e13a5eec70f554e532336a912a9cd78317a.zip
jemalloc-c2323e13a5eec70f554e532336a912a9cd78317a.tar.gz
jemalloc-c2323e13a5eec70f554e532336a912a9cd78317a.tar.bz2
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.
Diffstat (limited to 'include/jemalloc')
-rw-r--r--include/jemalloc/internal/mutex_structs.h30
-rw-r--r--include/jemalloc/internal/mutex_types.h12
-rw-r--r--include/jemalloc/internal/witness_types.h6
3 files changed, 34 insertions, 14 deletions
diff --git a/include/jemalloc/internal/mutex_structs.h b/include/jemalloc/internal/mutex_structs.h
index 4a18a07..c34c1d4 100644
--- a/include/jemalloc/internal/mutex_structs.h
+++ b/include/jemalloc/internal/mutex_structs.h
@@ -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 */
diff --git a/include/jemalloc/internal/mutex_types.h b/include/jemalloc/internal/mutex_types.h
index 8c9f249..b7e3a7a 100644
--- a/include/jemalloc/internal/mutex_types.h
+++ b/include/jemalloc/internal/mutex_types.h
@@ -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
diff --git a/include/jemalloc/internal/witness_types.h b/include/jemalloc/internal/witness_types.h
index 0678b08..3efaad7 100644
--- a/include/jemalloc/internal/witness_types.h
+++ b/include/jemalloc/internal/witness_types.h
@@ -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 */