mirror of
https://github.com/jemalloc/jemalloc.git
synced 2026-07-15 21:27:18 +03:00
Protect extents_dirty access with extents_mtx.
This fixes race conditions during purging.
This commit is contained in:
parent
bc49157d21
commit
f6d01ff4b7
5 changed files with 112 additions and 58 deletions
|
|
@ -176,12 +176,6 @@ struct arena_s {
|
|||
*/
|
||||
size_t ndirty;
|
||||
|
||||
/*
|
||||
* Ring sentinel used to track unused dirty memory. Dirty memory is
|
||||
* managed as an LRU of cached extents.
|
||||
*/
|
||||
extent_t extents_dirty;
|
||||
|
||||
/*
|
||||
* Approximate time in seconds from the creation of a set of unused
|
||||
* dirty pages until an equivalent set of unused dirty pages is purged
|
||||
|
|
@ -240,7 +234,12 @@ struct arena_s {
|
|||
*/
|
||||
extent_heap_t extents_cached[NPSIZES];
|
||||
extent_heap_t extents_retained[NPSIZES];
|
||||
/* Protects extents_cached and extents_retained. */
|
||||
/*
|
||||
* Ring sentinel used to track unused dirty memory. Dirty memory is
|
||||
* managed as an LRU of cached extents.
|
||||
*/
|
||||
extent_t extents_dirty;
|
||||
/* Protects extents_{cached,retained,dirty}. */
|
||||
malloc_mutex_t extents_mtx;
|
||||
|
||||
/* User-configurable extent hook functions. */
|
||||
|
|
@ -287,10 +286,10 @@ extent_t *arena_extent_cache_alloc(tsdn_t *tsdn, arena_t *arena,
|
|||
size_t alignment, bool *zero);
|
||||
void arena_extent_cache_dalloc(tsdn_t *tsdn, arena_t *arena,
|
||||
extent_hooks_t **r_extent_hooks, extent_t *extent);
|
||||
void arena_extent_cache_maybe_insert(arena_t *arena, extent_t *extent,
|
||||
bool cache);
|
||||
void arena_extent_cache_maybe_remove(arena_t *arena, extent_t *extent,
|
||||
bool cache);
|
||||
void arena_extent_cache_maybe_insert(tsdn_t *tsdn, arena_t *arena,
|
||||
extent_t *extent, bool cache);
|
||||
void arena_extent_cache_maybe_remove(tsdn_t *tsdn, arena_t *arena,
|
||||
extent_t *extent, bool cache);
|
||||
extent_t *arena_extent_alloc_large(tsdn_t *tsdn, arena_t *arena,
|
||||
size_t usize, size_t alignment, bool *zero);
|
||||
void arena_extent_dalloc_large(tsdn_t *tsdn, arena_t *arena,
|
||||
|
|
|
|||
|
|
@ -99,6 +99,9 @@ size_t extent_size_quantize_ceil(size_t size);
|
|||
|
||||
ph_proto(, extent_heap_, extent_heap_t, extent_t)
|
||||
|
||||
extent_t *extent_alloc_cache_locked(tsdn_t *tsdn, arena_t *arena,
|
||||
extent_hooks_t **r_extent_hooks, void *new_addr, size_t usize, size_t pad,
|
||||
size_t alignment, bool *zero, bool slab);
|
||||
extent_t *extent_alloc_cache(tsdn_t *tsdn, arena_t *arena,
|
||||
extent_hooks_t **r_extent_hooks, void *new_addr, size_t usize, size_t pad,
|
||||
size_t alignment, bool *zero, bool slab);
|
||||
|
|
|
|||
|
|
@ -145,6 +145,7 @@ extent_addr_randomize
|
|||
extent_addr_set
|
||||
extent_alloc
|
||||
extent_alloc_cache
|
||||
extent_alloc_cache_locked
|
||||
extent_alloc_dss
|
||||
extent_alloc_mmap
|
||||
extent_alloc_wrapper
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue