From 57dbab5d6bc764a8b971334ec80977d6333688af Mon Sep 17 00:00:00 2001 From: Qi Wang Date: Mon, 15 Jul 2019 12:16:02 -0700 Subject: [PATCH] Avoid leaking extents / VM when split is not supported. This can only happen on Windows and with opt.retain disabled (which isn't the default). The solution is suboptimal, however not a common case as retain is the long term plan for all platforms anyway. --- src/extent.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/extent.c b/src/extent.c index 416d68fb..c6d402b0 100644 --- a/src/extent.c +++ b/src/extent.c @@ -1052,6 +1052,17 @@ extent_recycle_split(tsdn_t *tsdn, arena_t *arena, &to_leak, &to_salvage, new_addr, size, pad, alignment, slab, szind, growing_retained); + if (!maps_coalesce && result != extent_split_interior_ok + && !opt_retain) { + /* + * Split isn't supported (implies Windows w/o retain). Avoid + * leaking the extents. + */ + assert(to_leak != NULL && lead == NULL && trail == NULL); + extent_deactivate(tsdn, arena, extents, to_leak); + return NULL; + } + if (result == extent_split_interior_ok) { if (lead != NULL) { extent_deactivate(tsdn, arena, extents, lead);