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:
parent
57dbab5d6b
commit
42807fcd9e
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user