summaryrefslogtreecommitdiffstats
path: root/include/jemalloc
diff options
context:
space:
mode:
authorJason Evans <jasone@canonware.com>2017-03-01 19:21:18 (GMT)
committerJason Evans <jasone@canonware.com>2017-03-03 03:43:06 (GMT)
commitd61a5f76b2e3bcd866e19ab90a59081c5fc917fa (patch)
treec9c4db65155f3fef5f3ef7764d7c234e8f3dfa90 /include/jemalloc
parentff55f07eb6cc775755ffbea406d8967ec5e13d6e (diff)
downloadjemalloc-d61a5f76b2e3bcd866e19ab90a59081c5fc917fa.zip
jemalloc-d61a5f76b2e3bcd866e19ab90a59081c5fc917fa.tar.gz
jemalloc-d61a5f76b2e3bcd866e19ab90a59081c5fc917fa.tar.bz2
Convert arena_decay_t's time to be atomically synchronized.
Diffstat (limited to 'include/jemalloc')
-rw-r--r--include/jemalloc/internal/arena_externs.h2
-rw-r--r--include/jemalloc/internal/arena_structs_b.h11
2 files changed, 10 insertions, 3 deletions
diff --git a/include/jemalloc/internal/arena_externs.h b/include/jemalloc/internal/arena_externs.h
index d97b6a7..7b16d22 100644
--- a/include/jemalloc/internal/arena_externs.h
+++ b/include/jemalloc/internal/arena_externs.h
@@ -39,7 +39,7 @@ void arena_extent_ralloc_large_shrink(tsdn_t *tsdn, arena_t *arena,
extent_t *extent, size_t oldsize);
void arena_extent_ralloc_large_expand(tsdn_t *tsdn, arena_t *arena,
extent_t *extent, size_t oldsize);
-ssize_t arena_decay_time_get(tsdn_t *tsdn, arena_t *arena);
+ssize_t arena_decay_time_get(arena_t *arena);
bool arena_decay_time_set(tsdn_t *tsdn, arena_t *arena, ssize_t decay_time);
void arena_purge(tsdn_t *tsdn, arena_t *arena, bool all);
void arena_maybe_purge(tsdn_t *tsdn, arena_t *arena);
diff --git a/include/jemalloc/internal/arena_structs_b.h b/include/jemalloc/internal/arena_structs_b.h
index 92f1e41..49fdd17 100644
--- a/include/jemalloc/internal/arena_structs_b.h
+++ b/include/jemalloc/internal/arena_structs_b.h
@@ -36,15 +36,22 @@ struct arena_bin_info_s {
bitmap_info_t bitmap_info;
};
+typedef union {
+ size_t u; /* Used for atomic operations. */
+ ssize_t s; /* Time may be negative (means "never"). */
+} arena_decay_time_t;
+
struct arena_decay_s {
- /* Synchronizes all fields. */
+ /* Synchronizes all non-atomic fields. */
malloc_mutex_t mtx;
/*
* Approximate time in seconds from the creation of a set of unused
* dirty pages until an equivalent set of unused dirty pages is purged
* and/or reused.
+ *
+ * Synchronization: atomic.
*/
- ssize_t time;
+ arena_decay_time_t time;
/* time / SMOOTHSTEP_NSTEPS. */
nstime_t interval;
/*