This release contains over 160 commits, focusing on the technical debts
cleaning including refactorings, bug fixes, test coverage improvement, and
option cleanups. The release also includes portability improvements per
upstream issues report.
New features:
Add EXTENT_ALLOC_FLAG_PINNED so custom extent-allocation hooks can
mark non-reclaimable mappings, such as HugeTLB pages, for preferential
reuse outside the decay and purge pipeline. Add the mallctl interfaces
stats.pinned, stats.arenas.<i>.pinned,
stats.arenas.<i>.extents.<j>.npinned,
stats.arenas.<i>.extents.<j>.pinned_bytes, and
stats.arenas.<i>.mutexes.extents_pinned.{counter} to report
pinned-memory usage and mutex statistics. (@binliu19: be2de8c)
Allow resuming per-CPU arena selection via thread.arena.
Replace the runtime experimental_infallible_new option with the
compile-time --enable-cxx-infallible-new option, enabling
compiler-level optimizations and optimization in move constructors,
and fix the new(std::nothrow) contract (@spredolac: 160ab9d, fe33667)
Incompatible changes:
Adapt tcache fill and retention targets per bin to demand observed
between GC events, replacing the fixed refill/flush policy. Remove
seven legacy non-experimental controls: lg_tcache_nslots_mul,
tcache_nslots_small_min, tcache_nslots_small_max,
tcache_nslots_large, tcache_gc_delay_bytes,
lg_tcache_flush_small_div, and lg_tcache_flush_large_div.
Corresponding malloc_conf settings are silently ignored, matching
opt.* mallctls return ENOENT, and tcache_ncached_max remains
supported. (@spredolac: d13fe91)
Bug fixes:
Preserve errno across free, free_sized, and free_aligned_sized,
Fix TSD lifecycle edge cases by 1) initializing thread-cache bins before
marking the cache enabled, preventing reentrant bootstrap allocations
from using uninitialized state, and 2) avoiding TSD recreation for late
deallocations after thread teardown on generic-TSD platforms.
(@fzakaria: 54f22c8, @spredolac: fb5499a)
Use O_CLOEXEC when opening the THP sysfs file in init_thp_state.
Move background-thread lifecycle and state operations into the
background-thread module, clarifying ownership independently of PAC/HPA
callers. (@guangli-dai: f1f0792)
Simplify the page-allocation boundary by replacing PAI vtable dispatch
with direct PAC/HPA calls, removing the obsolete pai_t/pai.h
abstraction, and moving deferred-work and decay orchestration out of the
arena. (@guangli-dai: 1dfa6f7, 8edd101, d410f43)
Refactor statistics collection and rendering into separate