diff options
| author | Jason Evans <jasone@canonware.com> | 2017-05-25 18:15:41 -0700 |
|---|---|---|
| committer | Jason Evans <jasone@canonware.com> | 2017-05-29 17:27:18 -0700 |
| commit | a16114866a8e52a4fc8057d5c3123e2dc5c0ceab (patch) | |
| tree | 97126db061a3c25d960f9128eb8fe7a95d321756 | |
| parent | d5ef5ae9344d72f39569a05e7c9349dded497e41 (diff) | |
| download | platform_external_jemalloc_new-a16114866a8e52a4fc8057d5c3123e2dc5c0ceab.tar.gz platform_external_jemalloc_new-a16114866a8e52a4fc8057d5c3123e2dc5c0ceab.tar.bz2 platform_external_jemalloc_new-a16114866a8e52a4fc8057d5c3123e2dc5c0ceab.zip | |
Fix OOM paths in extent_grow_retained().
| -rw-r--r-- | src/extent.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/extent.c b/src/extent.c index fee8198e..7359a558 100644 --- a/src/extent.c +++ b/src/extent.c @@ -1046,10 +1046,15 @@ extent_grow_retained(tsdn_t *tsdn, arena_t *arena, extent_init(extent, arena, ptr, alloc_size, false, NSIZES, arena_extent_sn_next(arena), extent_state_active, zeroed, committed); - if (ptr == NULL || extent_register_no_gdump_add(tsdn, extent)) { + if (ptr == NULL) { extent_dalloc(tsdn, arena, extent); return NULL; } + if (extent_register_no_gdump_add(tsdn, extent)) { + extents_leak(tsdn, arena, r_extent_hooks, + &arena->extents_retained, extent); + return NULL; + } size_t leadsize = ALIGNMENT_CEILING((uintptr_t)ptr, PAGE_CEILING(alignment)) - (uintptr_t)ptr; @@ -1070,7 +1075,8 @@ extent_grow_retained(tsdn_t *tsdn, arena_t *arena, leadsize, NSIZES, false, esize + trailsize, szind, slab); if (extent == NULL) { extent_deregister(tsdn, lead); - extents_leak(tsdn, arena, r_extent_hooks, false, lead); + extents_leak(tsdn, arena, r_extent_hooks, + &arena->extents_retained, lead); return NULL; } extent_record(tsdn, arena, r_extent_hooks, |
