extent_dalloc instead of leak when register fails.

extent_register may only fail if the underlying extent and region got stolen /
coalesced before we lock.  Avoid doing extent_leak (which purges the region)
since we don't really own the region.
This commit is contained in:
Qi Wang 2019-07-15 14:55:43 -07:00 committed by Qi Wang
parent 57dbab5d6b
commit 42807fcd9e

View File

@ -1335,8 +1335,7 @@ extent_grow_retained(tsdn_t *tsdn, arena_t *arena,
} }
if (extent_register_no_gdump_add(tsdn, extent)) { if (extent_register_no_gdump_add(tsdn, extent)) {
extents_leak(tsdn, arena, r_extent_hooks, extent_dalloc(tsdn, arena, extent);
&arena->extents_retained, extent, true);
goto label_err; goto label_err;
} }
@ -1505,8 +1504,7 @@ extent_alloc_wrapper_hard(tsdn_t *tsdn, arena_t *arena,
extent_addr_randomize(tsdn, extent, alignment); extent_addr_randomize(tsdn, extent, alignment);
} }
if (extent_register(tsdn, extent)) { if (extent_register(tsdn, extent)) {
extents_leak(tsdn, arena, r_extent_hooks, extent_dalloc(tsdn, arena, extent);
&arena->extents_retained, extent, false);
return NULL; return NULL;
} }
@ -1729,8 +1727,7 @@ extent_dalloc_gap(tsdn_t *tsdn, arena_t *arena, extent_t *extent) {
WITNESS_RANK_CORE, 0); WITNESS_RANK_CORE, 0);
if (extent_register(tsdn, extent)) { if (extent_register(tsdn, extent)) {
extents_leak(tsdn, arena, &extent_hooks, extent_dalloc(tsdn, arena, extent);
&arena->extents_retained, extent, false);
return; return;
} }
extent_dalloc_wrapper(tsdn, arena, &extent_hooks, extent); extent_dalloc_wrapper(tsdn, arena, &extent_hooks, extent);