summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid T. Goldblatt <davidtgoldblatt@gmail.com>2017-10-02 01:02:39 (GMT)
committerDavid Goldblatt <davidtgoldblatt@gmail.com>2017-12-19 00:29:10 (GMT)
commita8dd8876fb483f402833fa05f0fb46fe7c5416e1 (patch)
treebd6dfde1ad99f87157e07e56c721ae3911ab4dbb
parent4bf4a1c4ea418ba490d35d23aee0f535e96ddd23 (diff)
downloadjemalloc-a8dd8876fb483f402833fa05f0fb46fe7c5416e1.zip
jemalloc-a8dd8876fb483f402833fa05f0fb46fe7c5416e1.tar.gz
jemalloc-a8dd8876fb483f402833fa05f0fb46fe7c5416e1.tar.bz2
Move bin initialization from arena module to bin module.
-rw-r--r--include/jemalloc/internal/bin.h3
-rw-r--r--include/jemalloc/internal/witness.h2
-rw-r--r--src/arena.c11
-rw-r--r--src/bin.c16
4 files changed, 21 insertions, 11 deletions
diff --git a/include/jemalloc/internal/bin.h b/include/jemalloc/internal/bin.h
index 09717b1..d792722 100644
--- a/include/jemalloc/internal/bin.h
+++ b/include/jemalloc/internal/bin.h
@@ -78,4 +78,7 @@ struct bin_s {
malloc_bin_stats_t stats;
};
+/* Returns true on error. */
+bool bin_init(bin_t *bin);
+
#endif /* JEMALLOC_INTERNAL_BIN_H */
diff --git a/include/jemalloc/internal/witness.h b/include/jemalloc/internal/witness.h
index 33be666..7ace8ae 100644
--- a/include/jemalloc/internal/witness.h
+++ b/include/jemalloc/internal/witness.h
@@ -51,7 +51,7 @@
#define WITNESS_RANK_ARENA_LARGE 19U
#define WITNESS_RANK_LEAF 0xffffffffU
-#define WITNESS_RANK_ARENA_BIN WITNESS_RANK_LEAF
+#define WITNESS_RANK_BIN WITNESS_RANK_LEAF
#define WITNESS_RANK_ARENA_STATS WITNESS_RANK_LEAF
#define WITNESS_RANK_DSS WITNESS_RANK_LEAF
#define WITNESS_RANK_PROF_ACTIVE WITNESS_RANK_LEAF
diff --git a/src/arena.c b/src/arena.c
index 2dcb447..0d27ffb 100644
--- a/src/arena.c
+++ b/src/arena.c
@@ -2042,17 +2042,10 @@ arena_new(tsdn_t *tsdn, unsigned ind, extent_hooks_t *extent_hooks) {
/* Initialize bins. */
for (i = 0; i < NBINS; i++) {
- bin_t *bin = &arena->bins[i];
- if (malloc_mutex_init(&bin->lock, "arena_bin",
- WITNESS_RANK_ARENA_BIN, malloc_mutex_rank_exclusive)) {
+ bool err = bin_init(&arena->bins[i]);
+ if (err) {
goto label_error;
}
- bin->slabcur = NULL;
- extent_heap_new(&bin->slabs_nonfull);
- extent_list_init(&bin->slabs_full);
- if (config_stats) {
- memset(&bin->stats, 0, sizeof(malloc_bin_stats_t));
- }
}
arena->base = base;
diff --git a/src/bin.c b/src/bin.c
index 59cdd2c..89b041d 100644
--- a/src/bin.c
+++ b/src/bin.c
@@ -2,6 +2,7 @@
#include "jemalloc/internal/jemalloc_internal_includes.h"
#include "jemalloc/internal/bin.h"
+#include "jemalloc/internal/witness.h"
const bin_info_t bin_infos[NBINS] = {
#define BIN_INFO_bin_yes(reg_size, slab_size, nregs) \
@@ -18,4 +19,17 @@ const bin_info_t bin_infos[NBINS] = {
#undef SC
};
-
+bool
+bin_init(bin_t *bin) {
+ if (malloc_mutex_init(&bin->lock, "arena_bin", WITNESS_RANK_BIN,
+ malloc_mutex_rank_exclusive)) {
+ return true;
+ }
+ bin->slabcur = NULL;
+ extent_heap_new(&bin->slabs_nonfull);
+ extent_list_init(&bin->slabs_full);
+ if (config_stats) {
+ memset(&bin->stats, 0, sizeof(malloc_bin_stats_t));
+ }
+ return false;
+}