Blame jemalloc/ChangeLog

Packit 345191
Following are change highlights associated with official releases.  Important
Packit 345191
bug fixes are all mentioned, but some internal enhancements are omitted here for
Packit 345191
brevity.  Much more detail can be found in the git revision history:
Packit 345191
Packit 345191
    https://github.com/jemalloc/jemalloc
Packit 345191
Packit 345191
* 5.2.1 (August 5, 2019)
Packit 345191
Packit 345191
  This release is primarily about Windows.  A critical virtual memory leak is
Packit 345191
  resolved on all Windows platforms.  The regression was present in all releases
Packit 345191
  since 5.0.0.
Packit 345191
Packit 345191
  Bug fixes:
Packit 345191
  - Fix a severe virtual memory leak on Windows.  This regression was first
Packit 345191
    released in 5.0.0.  (@Ignition, @j0t, @frederik-h, @davidtgoldblatt,
Packit 345191
    @interwq)
Packit 345191
  - Fix size 0 handling in posix_memalign().  This regression was first released
Packit 345191
    in 5.2.0.  (@interwq)
Packit 345191
  - Fix the prof_log unit test which may observe unexpected backtraces from
Packit 345191
    compiler optimizations.  The test was first added in 5.2.0.  (@marxin,
Packit 345191
    @gnzlbg, @interwq)
Packit 345191
  - Fix the declaration of the extent_avail tree.  This regression was first
Packit 345191
    released in 5.1.0.  (@zoulasc)
Packit 345191
  - Fix an incorrect reference in jeprof.  This functionality was first released
Packit 345191
    in 3.0.0.  (@prehistoric-penguin)
Packit 345191
  - Fix an assertion on the deallocation fast-path.  This regression was first
Packit 345191
    released in 5.2.0.  (@yinan1048576)
Packit 345191
  - Fix the TLS_MODEL attribute in headers.  This regression was first released
Packit 345191
    in 5.0.0.  (@zoulasc, @interwq)
Packit 345191
Packit 345191
  Optimizations and refactors:
Packit 345191
  - Implement opt.retain on Windows and enable by default on 64-bit.  (@interwq,
Packit 345191
    @davidtgoldblatt)
Packit 345191
  - Optimize away a branch on the operator delete[] path.  (@mgrice)
Packit 345191
  - Add format annotation to the format generator function.  (@zoulasc)
Packit 345191
  - Refactor and improve the size class header generation.  (@yinan1048576)
Packit 345191
  - Remove best fit.  (@djwatson)
Packit 345191
  - Avoid blocking on background thread locks for stats.  (@oranagra, @interwq)
Packit 345191
Packit 345191
* 5.2.0 (April 2, 2019)
Packit 345191
Packit 345191
  This release includes a few notable improvements, which are summarized below:
Packit 345191
  1) improved fast-path performance from the optimizations by @djwatson; 2)
Packit 345191
  reduced virtual memory fragmentation and metadata usage; and 3) bug fixes on
Packit 345191
  setting the number of background threads.  In addition, peak / spike memory
Packit 345191
  usage is improved with certain allocation patterns.  As usual, the release and
Packit 345191
  prior dev versions have gone through large-scale production testing.
Packit 345191
Packit 345191
  New features:
Packit 345191
  - Implement oversize_threshold, which uses a dedicated arena for allocations
Packit 345191
    crossing the specified threshold to reduce fragmentation.  (@interwq)
Packit 345191
  - Add extents usage information to stats.  (@tyleretzel)
Packit 345191
  - Log time information for sampled allocations.  (@tyleretzel)
Packit 345191
  - Support 0 size in sdallocx.  (@djwatson)
Packit 345191
  - Output rate for certain counters in malloc_stats.  (@zinoale)
Packit 345191
  - Add configure option --enable-readlinkat, which allows the use of readlinkat
Packit 345191
    over readlink.  (@davidtgoldblatt)
Packit 345191
  - Add configure options --{enable,disable}-{static,shared} to allow not
Packit 345191
    building unwanted libraries.  (@Ericson2314)
Packit 345191
  - Add configure option --disable-libdl to enable fully static builds.
Packit 345191
    (@interwq)
Packit 345191
  - Add mallctl interfaces:
Packit 345191
	+ opt.oversize_threshold (@interwq)
Packit 345191
	+ stats.arenas..extent_avail (@tyleretzel)
Packit 345191
	+ stats.arenas..extents.<j>.n{dirty,muzzy,retained} (@tyleretzel)
Packit 345191
	+ stats.arenas..extents.<j>.{dirty,muzzy,retained}_bytes
Packit 345191
	  (@tyleretzel)
Packit 345191
Packit 345191
  Portability improvements:
Packit 345191
  - Update MSVC builds.  (@maksqwe, @rustyx)
Packit 345191
  - Workaround a compiler optimizer bug on s390x.  (@rkmisra)
Packit 345191
  - Make use of pthread_set_name_np(3) on FreeBSD.  (@trasz)
Packit 345191
  - Implement malloc_getcpu() to enable percpu_arena for windows.  (@santagada)
Packit 345191
  - Link against -pthread instead of -lpthread.  (@paravoid)
Packit 345191
  - Make background_thread not dependent on libdl.  (@interwq)
Packit 345191
  - Add stringify to fix a linker directive issue on MSVC.  (@daverigby)
Packit 345191
  - Detect and fall back when 8-bit atomics are unavailable.  (@interwq)
Packit 345191
  - Fall back to the default pthread_create if dlsym(3) fails.  (@interwq)
Packit 345191
Packit 345191
  Optimizations and refactors:
Packit 345191
  - Refactor the TSD module.  (@davidtgoldblatt)
Packit 345191
  - Avoid taking extents_muzzy mutex when muzzy is disabled.  (@interwq)
Packit 345191
  - Avoid taking large_mtx for auto arenas on the tcache flush path.  (@interwq)
Packit 345191
  - Optimize ixalloc by avoiding a size lookup.  (@interwq)
Packit 345191
  - Implement opt.oversize_threshold which uses a dedicated arena for requests
Packit 345191
    crossing the threshold, also eagerly purges the oversize extents.  Default
Packit 345191
    the threshold to 8 MiB.  (@interwq)
Packit 345191
  - Clean compilation with -Wextra.  (@gnzlbg, @jasone)
Packit 345191
  - Refactor the size class module.  (@davidtgoldblatt)
Packit 345191
  - Refactor the stats emitter.  (@tyleretzel)
Packit 345191
  - Optimize pow2_ceil.  (@rkmisra)
Packit 345191
  - Avoid runtime detection of lazy purging on FreeBSD.  (@trasz)
Packit 345191
  - Optimize mmap(2) alignment handling on FreeBSD.  (@trasz)
Packit 345191
  - Improve error handling for THP state initialization.  (@jsteemann)
Packit 345191
  - Rework the malloc() fast path.  (@djwatson)
Packit 345191
  - Rework the free() fast path.  (@djwatson)
Packit 345191
  - Refactor and optimize the tcache fill / flush paths.  (@djwatson)
Packit 345191
  - Optimize sync / lwsync on PowerPC.  (@chmeeedalf)
Packit 345191
  - Bypass extent_dalloc() when retain is enabled.  (@interwq)
Packit 345191
  - Optimize the locking on large deallocation.  (@interwq)
Packit 345191
  - Reduce the number of pages committed from sanity checking in debug build.
Packit 345191
    (@trasz, @interwq)
Packit 345191
  - Deprecate OSSpinLock.  (@interwq)
Packit 345191
  - Lower the default number of background threads to 4 (when the feature
Packit 345191
    is enabled).  (@interwq)
Packit 345191
  - Optimize the trylock spin wait.  (@djwatson)
Packit 345191
  - Use arena index for arena-matching checks.  (@interwq)
Packit 345191
  - Avoid forced decay on thread termination when using background threads.
Packit 345191
    (@interwq)
Packit 345191
  - Disable muzzy decay by default.  (@djwatson, @interwq)
Packit 345191
  - Only initialize libgcc unwinder when profiling is enabled.  (@paravoid,
Packit 345191
    @interwq)
Packit 345191
Packit 345191
  Bug fixes (all only relevant to jemalloc 5.x):
Packit 345191
  - Fix background thread index issues with max_background_threads.  (@djwatson,
Packit 345191
    @interwq)
Packit 345191
  - Fix stats output for opt.lg_extent_max_active_fit.  (@interwq)
Packit 345191
  - Fix opt.prof_prefix initialization.  (@davidtgoldblatt)
Packit 345191
  - Properly trigger decay on tcache destroy.  (@interwq, @amosbird)
Packit 345191
  - Fix tcache.flush.  (@interwq)
Packit 345191
  - Detect whether explicit extent zero out is necessary with huge pages or
Packit 345191
    custom extent hooks, which may change the purge semantics.  (@interwq)
Packit 345191
  - Fix a side effect caused by extent_max_active_fit combined with decay-based
Packit 345191
    purging, where freed extents can accumulate and not be reused for an
Packit 345191
    extended period of time.  (@interwq, @mpghf)
Packit 345191
  - Fix a missing unlock on extent register error handling.  (@zoulasc)
Packit 345191
Packit 345191
  Testing:
Packit 345191
  - Simplify the Travis script output.  (@gnzlbg)
Packit 345191
  - Update the test scripts for FreeBSD.  (@devnexen)
Packit 345191
  - Add unit tests for the producer-consumer pattern.  (@interwq)
Packit 345191
  - Add Cirrus-CI config for FreeBSD builds.  (@jasone)
Packit 345191
  - Add size-matching sanity checks on tcache flush.  (@davidtgoldblatt,
Packit 345191
    @interwq)
Packit 345191
Packit 345191
  Incompatible changes:
Packit 345191
  - Remove --with-lg-page-sizes.  (@davidtgoldblatt)
Packit 345191
Packit 345191
  Documentation:
Packit 345191
  - Attempt to build docs by default, however skip doc building when xsltproc
Packit 345191
    is missing. (@interwq, @cmuellner)
Packit 345191
Packit 345191
* 5.1.0 (May 4, 2018)
Packit 345191
Packit 345191
  This release is primarily about fine-tuning, ranging from several new features
Packit 345191
  to numerous notable performance and portability enhancements.  The release and
Packit 345191
  prior dev versions have been running in multiple large scale applications for
Packit 345191
  months, and the cumulative improvements are substantial in many cases.
Packit 345191
Packit 345191
  Given the long and successful production runs, this release is likely a good
Packit 345191
  candidate for applications to upgrade, from both jemalloc 5.0 and before.  For
Packit 345191
  performance-critical applications, the newly added TUNING.md provides
Packit 345191
  guidelines on jemalloc tuning.
Packit 345191
Packit 345191
  New features:
Packit 345191
  - Implement transparent huge page support for internal metadata.  (@interwq)
Packit 345191
  - Add opt.thp to allow enabling / disabling transparent huge pages for all
Packit 345191
    mappings.  (@interwq)
Packit 345191
  - Add maximum background thread count option.  (@djwatson)
Packit 345191
  - Allow prof_active to control opt.lg_prof_interval and prof.gdump.
Packit 345191
    (@interwq)
Packit 345191
  - Allow arena index lookup based on allocation addresses via mallctl.
Packit 345191
    (@lionkov)
Packit 345191
  - Allow disabling initial-exec TLS model.  (@davidtgoldblatt, @KenMacD)
Packit 345191
  - Add opt.lg_extent_max_active_fit to set the max ratio between the size of
Packit 345191
    the active extent selected (to split off from) and the size of the requested
Packit 345191
    allocation.  (@interwq, @davidtgoldblatt)
Packit 345191
  - Add retain_grow_limit to set the max size when growing virtual address
Packit 345191
    space.  (@interwq)
Packit 345191
  - Add mallctl interfaces:
Packit 345191
    + arena..retain_grow_limit  (@interwq)
Packit 345191
    + arenas.lookup  (@lionkov)
Packit 345191
    + max_background_threads  (@djwatson)
Packit 345191
    + opt.lg_extent_max_active_fit  (@interwq)
Packit 345191
    + opt.max_background_threads  (@djwatson)
Packit 345191
    + opt.metadata_thp  (@interwq)
Packit 345191
    + opt.thp  (@interwq)
Packit 345191
    + stats.metadata_thp  (@interwq)
Packit 345191
Packit 345191
  Portability improvements:
Packit 345191
  - Support GNU/kFreeBSD configuration.  (@paravoid)
Packit 345191
  - Support m68k, nios2 and SH3 architectures.  (@paravoid)
Packit 345191
  - Fall back to FD_CLOEXEC when O_CLOEXEC is unavailable.  (@zonyitoo)
Packit 345191
  - Fix symbol listing for cross-compiling.  (@tamird)
Packit 345191
  - Fix high bits computation on ARM.  (@davidtgoldblatt, @paravoid)
Packit 345191
  - Disable the CPU_SPINWAIT macro for Power.  (@davidtgoldblatt, @marxin)
Packit 345191
  - Fix MSVC 2015 & 2017 builds.  (@rustyx)
Packit 345191
  - Improve RISC-V support.  (@EdSchouten)
Packit 345191
  - Set name mangling script in strict mode.  (@nicolov)
Packit 345191
  - Avoid MADV_HUGEPAGE on ARM.  (@marxin)
Packit 345191
  - Modify configure to determine return value of strerror_r.
Packit 345191
    (@davidtgoldblatt, @cferris1000)
Packit 345191
  - Make sure CXXFLAGS is tested with CPP compiler.  (@nehaljwani)
Packit 345191
  - Fix 32-bit build on MSVC.  (@rustyx)
Packit 345191
  - Fix external symbol on MSVC.  (@maksqwe)
Packit 345191
  - Avoid a printf format specifier warning.  (@jasone)
Packit 345191
  - Add configure option --disable-initial-exec-tls which can allow jemalloc to
Packit 345191
    be dynamically loaded after program startup.  (@davidtgoldblatt, @KenMacD)
Packit 345191
  - AArch64: Add ILP32 support.  (@cmuellner)
Packit 345191
  - Add --with-lg-vaddr configure option to support cross compiling.
Packit 345191
    (@cmuellner, @davidtgoldblatt)
Packit 345191
Packit 345191
  Optimizations and refactors:
Packit 345191
  - Improve active extent fit with extent_max_active_fit.  This considerably
Packit 345191
    reduces fragmentation over time and improves virtual memory and metadata
Packit 345191
    usage.  (@davidtgoldblatt, @interwq)
Packit 345191
  - Eagerly coalesce large extents to reduce fragmentation.  (@interwq)
Packit 345191
  - sdallocx: only read size info when page aligned (i.e. possibly sampled),
Packit 345191
    which speeds up the sized deallocation path significantly.  (@interwq)
Packit 345191
  - Avoid attempting new mappings for in place expansion with retain, since
Packit 345191
    it rarely succeeds in practice and causes high overhead.  (@interwq)
Packit 345191
  - Refactor OOM handling in newImpl.  (@wqfish)
Packit 345191
  - Add internal fine-grained logging functionality for debugging use.
Packit 345191
    (@davidtgoldblatt)
Packit 345191
  - Refactor arena / tcache interactions.  (@davidtgoldblatt)
Packit 345191
  - Refactor extent management with dumpable flag.  (@davidtgoldblatt)
Packit 345191
  - Add runtime detection of lazy purging.  (@interwq)
Packit 345191
  - Use pairing heap instead of red-black tree for extents_avail.  (@djwatson)
Packit 345191
  - Use sysctl on startup in FreeBSD.  (@trasz)
Packit 345191
  - Use thread local prng state instead of atomic.  (@djwatson)
Packit 345191
  - Make decay to always purge one more extent than before, because in
Packit 345191
    practice large extents are usually the ones that cross the decay threshold.
Packit 345191
    Purging the additional extent helps save memory as well as reduce VM
Packit 345191
    fragmentation.  (@interwq)
Packit 345191
  - Fast division by dynamic values.  (@davidtgoldblatt)
Packit 345191
  - Improve the fit for aligned allocation.  (@interwq, @edwinsmith)
Packit 345191
  - Refactor extent_t bitpacking.  (@rkmisra)
Packit 345191
  - Optimize the generated assembly for ticker operations.  (@davidtgoldblatt)
Packit 345191
  - Convert stats printing to use a structured text emitter.  (@davidtgoldblatt)
Packit 345191
  - Remove preserve_lru feature for extents management.  (@djwatson)
Packit 345191
  - Consolidate two memory loads into one on the fast deallocation path.
Packit 345191
    (@davidtgoldblatt, @interwq)
Packit 345191
Packit 345191
  Bug fixes (most of the issues are only relevant to jemalloc 5.0):
Packit 345191
  - Fix deadlock with multithreaded fork in OS X.  (@davidtgoldblatt)
Packit 345191
  - Validate returned file descriptor before use.  (@zonyitoo)
Packit 345191
  - Fix a few background thread initialization and shutdown issues.  (@interwq)
Packit 345191
  - Fix an extent coalesce + decay race by taking both coalescing extents off
Packit 345191
    the LRU list.  (@interwq)
Packit 345191
  - Fix potentially unbound increase during decay, caused by one thread keep
Packit 345191
    stashing memory to purge while other threads generating new pages.  The
Packit 345191
    number of pages to purge is checked to prevent this.  (@interwq)
Packit 345191
  - Fix a FreeBSD bootstrap assertion.  (@strejda, @interwq)
Packit 345191
  - Handle 32 bit mutex counters.  (@rkmisra)
Packit 345191
  - Fix a indexing bug when creating background threads.  (@davidtgoldblatt,
Packit 345191
    @binliu19)
Packit 345191
  - Fix arguments passed to extent_init.  (@yuleniwo, @interwq)
Packit 345191
  - Fix addresses used for ordering mutexes.  (@rkmisra)
Packit 345191
  - Fix abort_conf processing during bootstrap.  (@interwq)
Packit 345191
  - Fix include path order for out-of-tree builds.  (@cmuellner)
Packit 345191
Packit 345191
  Incompatible changes:
Packit 345191
  - Remove --disable-thp.  (@interwq)
Packit 345191
  - Remove mallctl interfaces:
Packit 345191
    + config.thp  (@interwq)
Packit 345191
Packit 345191
  Documentation:
Packit 345191
  - Add TUNING.md.  (@interwq, @davidtgoldblatt, @djwatson)
Packit 345191
Packit 345191
* 5.0.1 (July 1, 2017)
Packit 345191
Packit 345191
  This bugfix release fixes several issues, most of which are obscure enough
Packit 345191
  that typical applications are not impacted.
Packit 345191
Packit 345191
  Bug fixes:
Packit 345191
  - Update decay->nunpurged before purging, in order to avoid potential update
Packit 345191
    races and subsequent incorrect purging volume.  (@interwq)
Packit 345191
  - Only abort on dlsym(3) error if the failure impacts an enabled feature (lazy
Packit 345191
    locking and/or background threads).  This mitigates an initialization
Packit 345191
    failure bug for which we still do not have a clear reproduction test case.
Packit 345191
    (@interwq)
Packit 345191
  - Modify tsd management so that it neither crashes nor leaks if a thread's
Packit 345191
    only allocation activity is to call free() after TLS destructors have been
Packit 345191
    executed.  This behavior was observed when operating with GNU libc, and is
Packit 345191
    unlikely to be an issue with other libc implementations.  (@interwq)
Packit 345191
  - Mask signals during background thread creation.  This prevents signals from
Packit 345191
    being inadvertently delivered to background threads.  (@jasone,
Packit 345191
    @davidtgoldblatt, @interwq)
Packit 345191
  - Avoid inactivity checks within background threads, in order to prevent
Packit 345191
    recursive mutex acquisition.  (@interwq)
Packit 345191
  - Fix extent_grow_retained() to use the specified hooks when the
Packit 345191
    arena..extent_hooks mallctl is used to override the default hooks.
Packit 345191
    (@interwq)
Packit 345191
  - Add missing reentrancy support for custom extent hooks which allocate.
Packit 345191
    (@interwq)
Packit 345191
  - Post-fork(2), re-initialize the list of tcaches associated with each arena
Packit 345191
    to contain no tcaches except the forking thread's.  (@interwq)
Packit 345191
  - Add missing post-fork(2) mutex reinitialization for extent_grow_mtx.  This
Packit 345191
    fixes potential deadlocks after fork(2).  (@interwq)
Packit 345191
  - Enforce minimum autoconf version (currently 2.68), since 2.63 is known to
Packit 345191
    generate corrupt configure scripts.  (@jasone)
Packit 345191
  - Ensure that the configured page size (--with-lg-page) is no larger than the
Packit 345191
    configured huge page size (--with-lg-hugepage).  (@jasone)
Packit 345191
Packit 345191
* 5.0.0 (June 13, 2017)
Packit 345191
Packit 345191
  Unlike all previous jemalloc releases, this release does not use naturally
Packit 345191
  aligned "chunks" for virtual memory management, and instead uses page-aligned
Packit 345191
  "extents".  This change has few externally visible effects, but the internal
Packit 345191
  impacts are... extensive.  Many other internal changes combine to make this
Packit 345191
  the most cohesively designed version of jemalloc so far, with ample
Packit 345191
  opportunity for further enhancements.
Packit 345191
Packit 345191
  Continuous integration is now an integral aspect of development thanks to the
Packit 345191
  efforts of @davidtgoldblatt, and the dev branch tends to remain reasonably
Packit 345191
  stable on the tested platforms (Linux, FreeBSD, macOS, and Windows).  As a
Packit 345191
  side effect the official release frequency may decrease over time.
Packit 345191
Packit 345191
  New features:
Packit 345191
  - Implement optional per-CPU arena support; threads choose which arena to use
Packit 345191
    based on current CPU rather than on fixed thread-->arena associations.
Packit 345191
    (@interwq)
Packit 345191
  - Implement two-phase decay of unused dirty pages.  Pages transition from
Packit 345191
    dirty-->muzzy-->clean, where the first phase transition relies on
Packit 345191
    madvise(... MADV_FREE) semantics, and the second phase transition discards
Packit 345191
    pages such that they are replaced with demand-zeroed pages on next access.
Packit 345191
    (@jasone)
Packit 345191
  - Increase decay time resolution from seconds to milliseconds.  (@jasone)
Packit 345191
  - Implement opt-in per CPU background threads, and use them for asynchronous
Packit 345191
    decay-driven unused dirty page purging.  (@interwq)
Packit 345191
  - Add mutex profiling, which collects a variety of statistics useful for
Packit 345191
    diagnosing overhead/contention issues.  (@interwq)
Packit 345191
  - Add C++ new/delete operator bindings.  (@djwatson)
Packit 345191
  - Support manually created arena destruction, such that all data and metadata
Packit 345191
    are discarded.  Add MALLCTL_ARENAS_DESTROYED for accessing merged stats
Packit 345191
    associated with destroyed arenas.  (@jasone)
Packit 345191
  - Add MALLCTL_ARENAS_ALL as a fixed index for use in accessing
Packit 345191
    merged/destroyed arena statistics via mallctl.  (@jasone)
Packit 345191
  - Add opt.abort_conf to optionally abort if invalid configuration options are
Packit 345191
    detected during initialization.  (@interwq)
Packit 345191
  - Add opt.stats_print_opts, so that e.g. JSON output can be selected for the
Packit 345191
    stats dumped during exit if opt.stats_print is true.  (@jasone)
Packit 345191
  - Add --with-version=VERSION for use when embedding jemalloc into another
Packit 345191
    project's git repository.  (@jasone)
Packit 345191
  - Add --disable-thp to support cross compiling.  (@jasone)
Packit 345191
  - Add --with-lg-hugepage to support cross compiling.  (@jasone)
Packit 345191
  - Add mallctl interfaces (various authors):
Packit 345191
    + background_thread
Packit 345191
    + opt.abort_conf
Packit 345191
    + opt.retain
Packit 345191
    + opt.percpu_arena
Packit 345191
    + opt.background_thread
Packit 345191
    + opt.{dirty,muzzy}_decay_ms
Packit 345191
    + opt.stats_print_opts
Packit 345191
    + arena..initialized
Packit 345191
    + arena..destroy
Packit 345191
    + arena..{dirty,muzzy}_decay_ms
Packit 345191
    + arena..extent_hooks
Packit 345191
    + arenas.{dirty,muzzy}_decay_ms
Packit 345191
    + arenas.bin..slab_size
Packit 345191
    + arenas.nlextents
Packit 345191
    + arenas.lextent..size
Packit 345191
    + arenas.create
Packit 345191
    + stats.background_thread.{num_threads,num_runs,run_interval}
Packit 345191
    + stats.mutexes.{ctl,background_thread,prof,reset}.
Packit 345191
      {num_ops,num_spin_acq,num_wait,max_wait_time,total_wait_time,max_num_thds,
Packit 345191
      num_owner_switch}
Packit 345191
    + stats.arenas..{dirty,muzzy}_decay_ms
Packit 345191
    + stats.arenas..uptime
Packit 345191
    + stats.arenas..{pmuzzy,base,internal,resident}
Packit 345191
    + stats.arenas..{dirty,muzzy}_{npurge,nmadvise,purged}
Packit 345191
    + stats.arenas..bins.<j>.{nslabs,reslabs,curslabs}
Packit 345191
    + stats.arenas..bins.<j>.mutex.
Packit 345191
      {num_ops,num_spin_acq,num_wait,max_wait_time,total_wait_time,max_num_thds,
Packit 345191
      num_owner_switch}
Packit 345191
    + stats.arenas..lextents.<j>.{nmalloc,ndalloc,nrequests,curlextents}
Packit 345191
    + stats.arenas.i.mutexes.{large,extent_avail,extents_dirty,extents_muzzy,
Packit 345191
      extents_retained,decay_dirty,decay_muzzy,base,tcache_list}.
Packit 345191
      {num_ops,num_spin_acq,num_wait,max_wait_time,total_wait_time,max_num_thds,
Packit 345191
      num_owner_switch}
Packit 345191
Packit 345191
  Portability improvements:
Packit 345191
  - Improve reentrant allocation support, such that deadlock is less likely if
Packit 345191
    e.g. a system library call in turn allocates memory.  (@davidtgoldblatt,
Packit 345191
    @interwq)
Packit 345191
  - Support static linking of jemalloc with glibc.  (@djwatson)
Packit 345191
Packit 345191
  Optimizations and refactors:
Packit 345191
  - Organize virtual memory as "extents" of virtual memory pages, rather than as
Packit 345191
    naturally aligned "chunks", and store all metadata in arbitrarily distant
Packit 345191
    locations.  This reduces virtual memory external fragmentation, and will
Packit 345191
    interact better with huge pages (not yet explicitly supported).  (@jasone)
Packit 345191
  - Fold large and huge size classes together; only small and large size classes
Packit 345191
    remain.  (@jasone)
Packit 345191
  - Unify the allocation paths, and merge most fast-path branching decisions.
Packit 345191
    (@davidtgoldblatt, @interwq)
Packit 345191
  - Embed per thread automatic tcache into thread-specific data, which reduces
Packit 345191
    conditional branches and dereferences.  Also reorganize tcache to increase
Packit 345191
    fast-path data locality.  (@interwq)
Packit 345191
  - Rewrite atomics to closely model the C11 API, convert various
Packit 345191
    synchronization from mutex-based to atomic, and use the explicit memory
Packit 345191
    ordering control to resolve various hypothetical races without increasing
Packit 345191
    synchronization overhead.  (@davidtgoldblatt)
Packit 345191
  - Extensively optimize rtree via various methods:
Packit 345191
    + Add multiple layers of rtree lookup caching, since rtree lookups are now
Packit 345191
      part of fast-path deallocation.  (@interwq)
Packit 345191
    + Determine rtree layout at compile time.  (@jasone)
Packit 345191
    + Make the tree shallower for common configurations.  (@jasone)
Packit 345191
    + Embed the root node in the top-level rtree data structure, thus avoiding
Packit 345191
      one level of indirection.  (@jasone)
Packit 345191
    + Further specialize leaf elements as compared to internal node elements,
Packit 345191
      and directly embed extent metadata needed for fast-path deallocation.
Packit 345191
      (@jasone)
Packit 345191
    + Ignore leading always-zero address bits (architecture-specific).
Packit 345191
      (@jasone)
Packit 345191
  - Reorganize headers (ongoing work) to make them hermetic, and disentangle
Packit 345191
    various module dependencies.  (@davidtgoldblatt)
Packit 345191
  - Convert various internal data structures such as size class metadata from
Packit 345191
    boot-time-initialized to compile-time-initialized.  Propagate resulting data
Packit 345191
    structure simplifications, such as making arena metadata fixed-size.
Packit 345191
    (@jasone)
Packit 345191
  - Simplify size class lookups when constrained to size classes that are
Packit 345191
    multiples of the page size.  This speeds lookups, but the primary benefit is
Packit 345191
    complexity reduction in code that was the source of numerous regressions.
Packit 345191
    (@jasone)
Packit 345191
  - Lock individual extents when possible for localized extent operations,
Packit 345191
    rather than relying on a top-level arena lock.  (@davidtgoldblatt, @jasone)
Packit 345191
  - Use first fit layout policy instead of best fit, in order to improve
Packit 345191
    packing.  (@jasone)
Packit 345191
  - If munmap(2) is not in use, use an exponential series to grow each arena's
Packit 345191
    virtual memory, so that the number of disjoint virtual memory mappings
Packit 345191
    remains low.  (@jasone)
Packit 345191
  - Implement per arena base allocators, so that arenas never share any virtual
Packit 345191
    memory pages.  (@jasone)
Packit 345191
  - Automatically generate private symbol name mangling macros.  (@jasone)
Packit 345191
Packit 345191
  Incompatible changes:
Packit 345191
  - Replace chunk hooks with an expanded/normalized set of extent hooks.
Packit 345191
    (@jasone)
Packit 345191
  - Remove ratio-based purging.  (@jasone)
Packit 345191
  - Remove --disable-tcache.  (@jasone)
Packit 345191
  - Remove --disable-tls.  (@jasone)
Packit 345191
  - Remove --enable-ivsalloc.  (@jasone)
Packit 345191
  - Remove --with-lg-size-class-group.  (@jasone)
Packit 345191
  - Remove --with-lg-tiny-min.  (@jasone)
Packit 345191
  - Remove --disable-cc-silence.  (@jasone)
Packit 345191
  - Remove --enable-code-coverage.  (@jasone)
Packit 345191
  - Remove --disable-munmap (replaced by opt.retain).  (@jasone)
Packit 345191
  - Remove Valgrind support.  (@jasone)
Packit 345191
  - Remove quarantine support.  (@jasone)
Packit 345191
  - Remove redzone support.  (@jasone)
Packit 345191
  - Remove mallctl interfaces (various authors):
Packit 345191
    + config.munmap
Packit 345191
    + config.tcache
Packit 345191
    + config.tls
Packit 345191
    + config.valgrind
Packit 345191
    + opt.lg_chunk
Packit 345191
    + opt.purge
Packit 345191
    + opt.lg_dirty_mult
Packit 345191
    + opt.decay_time
Packit 345191
    + opt.quarantine
Packit 345191
    + opt.redzone
Packit 345191
    + opt.thp
Packit 345191
    + arena..lg_dirty_mult
Packit 345191
    + arena..decay_time
Packit 345191
    + arena..chunk_hooks
Packit 345191
    + arenas.initialized
Packit 345191
    + arenas.lg_dirty_mult
Packit 345191
    + arenas.decay_time
Packit 345191
    + arenas.bin..run_size
Packit 345191
    + arenas.nlruns
Packit 345191
    + arenas.lrun..size
Packit 345191
    + arenas.nhchunks
Packit 345191
    + arenas.hchunk..size
Packit 345191
    + arenas.extend
Packit 345191
    + stats.cactive
Packit 345191
    + stats.arenas..lg_dirty_mult
Packit 345191
    + stats.arenas..decay_time
Packit 345191
    + stats.arenas..metadata.{mapped,allocated}
Packit 345191
    + stats.arenas..{npurge,nmadvise,purged}
Packit 345191
    + stats.arenas..huge.{allocated,nmalloc,ndalloc,nrequests}
Packit 345191
    + stats.arenas..bins.<j>.{nruns,reruns,curruns}
Packit 345191
    + stats.arenas..lruns.<j>.{nmalloc,ndalloc,nrequests,curruns}
Packit 345191
    + stats.arenas..hchunks.<j>.{nmalloc,ndalloc,nrequests,curhchunks}
Packit 345191
Packit 345191
  Bug fixes:
Packit 345191
  - Improve interval-based profile dump triggering to dump only one profile when
Packit 345191
    a single allocation's size exceeds the interval.  (@jasone)
Packit 345191
  - Use prefixed function names (as controlled by --with-jemalloc-prefix) when
Packit 345191
    pruning backtrace frames in jeprof.  (@jasone)
Packit 345191
Packit 345191
* 4.5.0 (February 28, 2017)
Packit 345191
Packit 345191
  This is the first release to benefit from much broader continuous integration
Packit 345191
  testing, thanks to @davidtgoldblatt.  Had we had this testing infrastructure
Packit 345191
  in place for prior releases, it would have caught all of the most serious
Packit 345191
  regressions fixed by this release.
Packit 345191
Packit 345191
  New features:
Packit 345191
  - Add --disable-thp and the opt.thp mallctl to provide opt-out mechanisms for
Packit 345191
    transparent huge page integration.  (@jasone)
Packit 345191
  - Update zone allocator integration to work with macOS 10.12.  (@glandium)
Packit 345191
  - Restructure *CFLAGS configuration, so that CFLAGS behaves typically, and
Packit 345191
    EXTRA_CFLAGS provides a way to specify e.g. -Werror during building, but not
Packit 345191
    during configuration.  (@jasone, @ronawho)
Packit 345191
Packit 345191
  Bug fixes:
Packit 345191
  - Fix DSS (sbrk(2)-based) allocation.  This regression was first released in
Packit 345191
    4.3.0.  (@jasone)
Packit 345191
  - Handle race in per size class utilization computation.  This functionality
Packit 345191
    was first released in 4.0.0.  (@interwq)
Packit 345191
  - Fix lock order reversal during gdump.  (@jasone)
Packit 345191
  - Fix/refactor tcache synchronization.  This regression was first released in
Packit 345191
    4.0.0.  (@jasone)
Packit 345191
  - Fix various JSON-formatted malloc_stats_print() bugs.  This functionality
Packit 345191
    was first released in 4.3.0.  (@jasone)
Packit 345191
  - Fix huge-aligned allocation.  This regression was first released in 4.4.0.
Packit 345191
    (@jasone)
Packit 345191
  - When transparent huge page integration is enabled, detect what state pages
Packit 345191
    start in according to the kernel's current operating mode, and only convert
Packit 345191
    arena chunks to non-huge during purging if that is not their initial state.
Packit 345191
    This functionality was first released in 4.4.0.  (@jasone)
Packit 345191
  - Fix lg_chunk clamping for the --enable-cache-oblivious --disable-fill case.
Packit 345191
    This regression was first released in 4.0.0.  (@jasone, @428desmo)
Packit 345191
  - Properly detect sparc64 when building for Linux.  (@glaubitz)
Packit 345191
Packit 345191
* 4.4.0 (December 3, 2016)
Packit 345191
Packit 345191
  New features:
Packit 345191
  - Add configure support for *-*-linux-android.  (@cferris1000, @jasone)
Packit 345191
  - Add the --disable-syscall configure option, for use on systems that place
Packit 345191
    security-motivated limitations on syscall(2).  (@jasone)
Packit 345191
  - Add support for Debian GNU/kFreeBSD.  (@thesam)
Packit 345191
Packit 345191
  Optimizations:
Packit 345191
  - Add extent serial numbers and use them where appropriate as a sort key that
Packit 345191
    is higher priority than address, so that the allocation policy prefers older
Packit 345191
    extents.  This tends to improve locality (decrease fragmentation) when
Packit 345191
    memory grows downward.  (@jasone)
Packit 345191
  - Refactor madvise(2) configuration so that MADV_FREE is detected and utilized
Packit 345191
    on Linux 4.5 and newer.  (@jasone)
Packit 345191
  - Mark partially purged arena chunks as non-huge-page.  This improves
Packit 345191
    interaction with Linux's transparent huge page functionality.  (@jasone)
Packit 345191
Packit 345191
  Bug fixes:
Packit 345191
  - Fix size class computations for edge conditions involving extremely large
Packit 345191
    allocations.  This regression was first released in 4.0.0.  (@jasone,
Packit 345191
    @ingvarha)
Packit 345191
  - Remove overly restrictive assertions related to the cactive statistic.  This
Packit 345191
    regression was first released in 4.1.0.  (@jasone)
Packit 345191
  - Implement a more reliable detection scheme for os_unfair_lock on macOS.
Packit 345191
    (@jszakmeister)
Packit 345191
Packit 345191
* 4.3.1 (November 7, 2016)
Packit 345191
Packit 345191
  Bug fixes:
Packit 345191
  - Fix a severe virtual memory leak.  This regression was first released in
Packit 345191
    4.3.0.  (@interwq, @jasone)
Packit 345191
  - Refactor atomic and prng APIs to restore support for 32-bit platforms that
Packit 345191
    use pre-C11 toolchains, e.g. FreeBSD's mips.  (@jasone)
Packit 345191
Packit 345191
* 4.3.0 (November 4, 2016)
Packit 345191
Packit 345191
  This is the first release that passes the test suite for multiple Windows
Packit 345191
  configurations, thanks in large part to @glandium setting up continuous
Packit 345191
  integration via AppVeyor (and Travis CI for Linux and OS X).
Packit 345191
Packit 345191
  New features:
Packit 345191
  - Add "J" (JSON) support to malloc_stats_print().  (@jasone)
Packit 345191
  - Add Cray compiler support.  (@ronawho)
Packit 345191
Packit 345191
  Optimizations:
Packit 345191
  - Add/use adaptive spinning for bootstrapping and radix tree node
Packit 345191
    initialization.  (@jasone)
Packit 345191
Packit 345191
  Bug fixes:
Packit 345191
  - Fix large allocation to search starting in the optimal size class heap,
Packit 345191
    which can substantially reduce virtual memory churn and fragmentation.  This
Packit 345191
    regression was first released in 4.0.0.  (@mjp41, @jasone)
Packit 345191
  - Fix stats.arenas..nthreads accounting.  (@interwq)
Packit 345191
  - Fix and simplify decay-based purging.  (@jasone)
Packit 345191
  - Make DSS (sbrk(2)-related) operations lockless, which resolves potential
Packit 345191
    deadlocks during thread exit.  (@jasone)
Packit 345191
  - Fix over-sized allocation of radix tree leaf nodes.  (@mjp41, @ogaun,
Packit 345191
    @jasone)
Packit 345191
  - Fix over-sized allocation of arena_t (plus associated stats) data
Packit 345191
    structures.  (@jasone, @interwq)
Packit 345191
  - Fix EXTRA_CFLAGS to not affect configuration.  (@jasone)
Packit 345191
  - Fix a Valgrind integration bug.  (@ronawho)
Packit 345191
  - Disallow 0x5a junk filling when running in Valgrind.  (@jasone)
Packit 345191
  - Fix a file descriptor leak on Linux.  This regression was first released in
Packit 345191
    4.2.0.  (@vsarunas, @jasone)
Packit 345191
  - Fix static linking of jemalloc with glibc.  (@djwatson)
Packit 345191
  - Use syscall(2) rather than {open,read,close}(2) during boot on Linux.  This
Packit 345191
    works around other libraries' system call wrappers performing reentrant
Packit 345191
    allocation.  (@kspinka, @Whissi, @jasone)
Packit 345191
  - Fix OS X default zone replacement to work with OS X 10.12.  (@glandium,
Packit 345191
    @jasone)
Packit 345191
  - Fix cached memory management to avoid needless commit/decommit operations
Packit 345191
    during purging, which resolves permanent virtual memory map fragmentation
Packit 345191
    issues on Windows.  (@mjp41, @jasone)
Packit 345191
  - Fix TSD fetches to avoid (recursive) allocation.  This is relevant to
Packit 345191
    non-TLS and Windows configurations.  (@jasone)
Packit 345191
  - Fix malloc_conf overriding to work on Windows.  (@jasone)
Packit 345191
  - Forcibly disable lazy-lock on Windows (was forcibly *enabled*).  (@jasone)
Packit 345191
Packit 345191
* 4.2.1 (June 8, 2016)
Packit 345191
Packit 345191
  Bug fixes:
Packit 345191
  - Fix bootstrapping issues for configurations that require allocation during
Packit 345191
    tsd initialization (e.g. --disable-tls).  (@cferris1000, @jasone)
Packit 345191
  - Fix gettimeofday() version of nstime_update().  (@ronawho)
Packit 345191
  - Fix Valgrind regressions in calloc() and chunk_alloc_wrapper().  (@ronawho)
Packit 345191
  - Fix potential VM map fragmentation regression.  (@jasone)
Packit 345191
  - Fix opt_zero-triggered in-place huge reallocation zeroing.  (@jasone)
Packit 345191
  - Fix heap profiling context leaks in reallocation edge cases.  (@jasone)
Packit 345191
Packit 345191
* 4.2.0 (May 12, 2016)
Packit 345191
Packit 345191
  New features:
Packit 345191
  - Add the arena..reset mallctl, which makes it possible to discard all of
Packit 345191
    an arena's allocations in a single operation.  (@jasone)
Packit 345191
  - Add the stats.retained and stats.arenas..retained statistics.  (@jasone)
Packit 345191
  - Add the --with-version configure option.  (@jasone)
Packit 345191
  - Support --with-lg-page values larger than actual page size.  (@jasone)
Packit 345191
Packit 345191
  Optimizations:
Packit 345191
  - Use pairing heaps rather than red-black trees for various hot data
Packit 345191
    structures.  (@djwatson, @jasone)
Packit 345191
  - Streamline fast paths of rtree operations.  (@jasone)
Packit 345191
  - Optimize the fast paths of calloc() and [m,d,sd]allocx().  (@jasone)
Packit 345191
  - Decommit unused virtual memory if the OS does not overcommit.  (@jasone)
Packit 345191
  - Specify MAP_NORESERVE on Linux if [heuristic] overcommit is active, in order
Packit 345191
    to avoid unfortunate interactions during fork(2).  (@jasone)
Packit 345191
Packit 345191
  Bug fixes:
Packit 345191
  - Fix chunk accounting related to triggering gdump profiles.  (@jasone)
Packit 345191
  - Link against librt for clock_gettime(2) if glibc < 2.17.  (@jasone)
Packit 345191
  - Scale leak report summary according to sampling probability.  (@jasone)
Packit 345191
Packit 345191
* 4.1.1 (May 3, 2016)
Packit 345191
Packit 345191
  This bugfix release resolves a variety of mostly minor issues, though the
Packit 345191
  bitmap fix is critical for 64-bit Windows.
Packit 345191
Packit 345191
  Bug fixes:
Packit 345191
  - Fix the linear scan version of bitmap_sfu() to shift by the proper amount
Packit 345191
    even when sizeof(long) is not the same as sizeof(void *), as on 64-bit
Packit 345191
    Windows.  (@jasone)
Packit 345191
  - Fix hashing functions to avoid unaligned memory accesses (and resulting
Packit 345191
    crashes).  This is relevant at least to some ARM-based platforms.
Packit 345191
    (@rkmisra)
Packit 345191
  - Fix fork()-related lock rank ordering reversals.  These reversals were
Packit 345191
    unlikely to cause deadlocks in practice except when heap profiling was
Packit 345191
    enabled and active.  (@jasone)
Packit 345191
  - Fix various chunk leaks in OOM code paths.  (@jasone)
Packit 345191
  - Fix malloc_stats_print() to print opt.narenas correctly.  (@jasone)
Packit 345191
  - Fix MSVC-specific build/test issues.  (@rustyx, @yuslepukhin)
Packit 345191
  - Fix a variety of test failures that were due to test fragility rather than
Packit 345191
    core bugs.  (@jasone)
Packit 345191
Packit 345191
* 4.1.0 (February 28, 2016)
Packit 345191
Packit 345191
  This release is primarily about optimizations, but it also incorporates a lot
Packit 345191
  of portability-motivated refactoring and enhancements.  Many people worked on
Packit 345191
  this release, to an extent that even with the omission here of minor changes
Packit 345191
  (see git revision history), and of the people who reported and diagnosed
Packit 345191
  issues, so much of the work was contributed that starting with this release,
Packit 345191
  changes are annotated with author credits to help reflect the collaborative
Packit 345191
  effort involved.
Packit 345191
Packit 345191
  New features:
Packit 345191
  - Implement decay-based unused dirty page purging, a major optimization with
Packit 345191
    mallctl API impact.  This is an alternative to the existing ratio-based
Packit 345191
    unused dirty page purging, and is intended to eventually become the sole
Packit 345191
    purging mechanism.  New mallctls:
Packit 345191
    + opt.purge
Packit 345191
    + opt.decay_time
Packit 345191
    + arena..decay
Packit 345191
    + arena..decay_time
Packit 345191
    + arenas.decay_time
Packit 345191
    + stats.arenas..decay_time
Packit 345191
    (@jasone, @cevans87)
Packit 345191
  - Add --with-malloc-conf, which makes it possible to embed a default
Packit 345191
    options string during configuration.  This was motivated by the desire to
Packit 345191
    specify --with-malloc-conf=purge:decay , since the default must remain
Packit 345191
    purge:ratio until the 5.0.0 release.  (@jasone)
Packit 345191
  - Add MS Visual Studio 2015 support.  (@rustyx, @yuslepukhin)
Packit 345191
  - Make *allocx() size class overflow behavior defined.  The maximum
Packit 345191
    size class is now less than PTRDIFF_MAX to protect applications against
Packit 345191
    numerical overflow, and all allocation functions are guaranteed to indicate
Packit 345191
    errors rather than potentially crashing if the request size exceeds the
Packit 345191
    maximum size class.  (@jasone)
Packit 345191
  - jeprof:
Packit 345191
    + Add raw heap profile support.  (@jasone)
Packit 345191
    + Add --retain and --exclude for backtrace symbol filtering.  (@jasone)
Packit 345191
Packit 345191
  Optimizations:
Packit 345191
  - Optimize the fast path to combine various bootstrapping and configuration
Packit 345191
    checks and execute more streamlined code in the common case.  (@interwq)
Packit 345191
  - Use linear scan for small bitmaps (used for small object tracking).  In
Packit 345191
    addition to speeding up bitmap operations on 64-bit systems, this reduces
Packit 345191
    allocator metadata overhead by approximately 0.2%.  (@djwatson)
Packit 345191
  - Separate arena_avail trees, which substantially speeds up run tree
Packit 345191
    operations.  (@djwatson)
Packit 345191
  - Use memoization (boot-time-computed table) for run quantization.  Separate
Packit 345191
    arena_avail trees reduced the importance of this optimization.  (@jasone)
Packit 345191
  - Attempt mmap-based in-place huge reallocation.  This can dramatically speed
Packit 345191
    up incremental huge reallocation.  (@jasone)
Packit 345191
Packit 345191
  Incompatible changes:
Packit 345191
  - Make opt.narenas unsigned rather than size_t.  (@jasone)
Packit 345191
Packit 345191
  Bug fixes:
Packit 345191
  - Fix stats.cactive accounting regression.  (@rustyx, @jasone)
Packit 345191
  - Handle unaligned keys in hash().  This caused problems for some ARM systems.
Packit 345191
    (@jasone, @cferris1000)
Packit 345191
  - Refactor arenas array.  In addition to fixing a fork-related deadlock, this
Packit 345191
    makes arena lookups faster and simpler.  (@jasone)
Packit 345191
  - Move retained memory allocation out of the default chunk allocation
Packit 345191
    function, to a location that gets executed even if the application installs
Packit 345191
    a custom chunk allocation function.  This resolves a virtual memory leak.
Packit 345191
    (@buchgr)
Packit 345191
  - Fix a potential tsd cleanup leak.  (@cferris1000, @jasone)
Packit 345191
  - Fix run quantization.  In practice this bug had no impact unless
Packit 345191
    applications requested memory with alignment exceeding one page.
Packit 345191
    (@jasone, @djwatson)
Packit 345191
  - Fix LinuxThreads-specific bootstrapping deadlock.  (Cosmin Paraschiv)
Packit 345191
  - jeprof:
Packit 345191
    + Don't discard curl options if timeout is not defined.  (@djwatson)
Packit 345191
    + Detect failed profile fetches.  (@djwatson)
Packit 345191
  - Fix stats.arenas..{dss,lg_dirty_mult,decay_time,pactive,pdirty} for
Packit 345191
    --disable-stats case.  (@jasone)
Packit 345191
Packit 345191
* 4.0.4 (October 24, 2015)
Packit 345191
Packit 345191
  This bugfix release fixes another xallocx() regression.  No other regressions
Packit 345191
  have come to light in over a month, so this is likely a good starting point
Packit 345191
  for people who prefer to wait for "dot one" releases with all the major issues
Packit 345191
  shaken out.
Packit 345191
Packit 345191
  Bug fixes:
Packit 345191
  - Fix xallocx(..., MALLOCX_ZERO to zero the last full trailing page of large
Packit 345191
    allocations that have been randomly assigned an offset of 0 when
Packit 345191
    --enable-cache-oblivious configure option is enabled.
Packit 345191
Packit 345191
* 4.0.3 (September 24, 2015)
Packit 345191
Packit 345191
  This bugfix release continues the trend of xallocx() and heap profiling fixes.
Packit 345191
Packit 345191
  Bug fixes:
Packit 345191
  - Fix xallocx(..., MALLOCX_ZERO) to zero all trailing bytes of large
Packit 345191
    allocations when --enable-cache-oblivious configure option is enabled.
Packit 345191
  - Fix xallocx(..., MALLOCX_ZERO) to zero trailing bytes of huge allocations
Packit 345191
    when resizing from/to a size class that is not a multiple of the chunk size.
Packit 345191
  - Fix prof_tctx_dump_iter() to filter out nodes that were created after heap
Packit 345191
    profile dumping started.
Packit 345191
  - Work around a potentially bad thread-specific data initialization
Packit 345191
    interaction with NPTL (glibc's pthreads implementation).
Packit 345191
Packit 345191
* 4.0.2 (September 21, 2015)
Packit 345191
Packit 345191
  This bugfix release addresses a few bugs specific to heap profiling.
Packit 345191
Packit 345191
  Bug fixes:
Packit 345191
  - Fix ixallocx_prof_sample() to never modify nor create sampled small
Packit 345191
    allocations.  xallocx() is in general incapable of moving small allocations,
Packit 345191
    so this fix removes buggy code without loss of generality.
Packit 345191
  - Fix irallocx_prof_sample() to always allocate large regions, even when
Packit 345191
    alignment is non-zero.
Packit 345191
  - Fix prof_alloc_rollback() to read tdata from thread-specific data rather
Packit 345191
    than dereferencing a potentially invalid tctx.
Packit 345191
Packit 345191
* 4.0.1 (September 15, 2015)
Packit 345191
Packit 345191
  This is a bugfix release that is somewhat high risk due to the amount of
Packit 345191
  refactoring required to address deep xallocx() problems.  As a side effect of
Packit 345191
  these fixes, xallocx() now tries harder to partially fulfill requests for
Packit 345191
  optional extra space.  Note that a couple of minor heap profiling
Packit 345191
  optimizations are included, but these are better thought of as performance
Packit 345191
  fixes that were integral to discovering most of the other bugs.
Packit 345191
Packit 345191
  Optimizations:
Packit 345191
  - Avoid a chunk metadata read in arena_prof_tctx_set(), since it is in the
Packit 345191
    fast path when heap profiling is enabled.  Additionally, split a special
Packit 345191
    case out into arena_prof_tctx_reset(), which also avoids chunk metadata
Packit 345191
    reads.
Packit 345191
  - Optimize irallocx_prof() to optimistically update the sampler state.  The
Packit 345191
    prior implementation appears to have been a holdover from when
Packit 345191
    rallocx()/xallocx() functionality was combined as rallocm().
Packit 345191
Packit 345191
  Bug fixes:
Packit 345191
  - Fix TLS configuration such that it is enabled by default for platforms on
Packit 345191
    which it works correctly.
Packit 345191
  - Fix arenas_cache_cleanup() and arena_get_hard() to handle
Packit 345191
    allocation/deallocation within the application's thread-specific data
Packit 345191
    cleanup functions even after arenas_cache is torn down.
Packit 345191
  - Fix xallocx() bugs related to size+extra exceeding HUGE_MAXCLASS.
Packit 345191
  - Fix chunk purge hook calls for in-place huge shrinking reallocation to
Packit 345191
    specify the old chunk size rather than the new chunk size.  This bug caused
Packit 345191
    no correctness issues for the default chunk purge function, but was
Packit 345191
    visible to custom functions set via the "arena..chunk_hooks" mallctl.
Packit 345191
  - Fix heap profiling bugs:
Packit 345191
    + Fix heap profiling to distinguish among otherwise identical sample sites
Packit 345191
      with interposed resets (triggered via the "prof.reset" mallctl).  This bug
Packit 345191
      could cause data structure corruption that would most likely result in a
Packit 345191
      segfault.
Packit 345191
    + Fix irealloc_prof() to prof_alloc_rollback() on OOM.
Packit 345191
    + Make one call to prof_active_get_unlocked() per allocation event, and use
Packit 345191
      the result throughout the relevant functions that handle an allocation
Packit 345191
      event.  Also add a missing check in prof_realloc().  These fixes protect
Packit 345191
      allocation events against concurrent prof_active changes.
Packit 345191
    + Fix ixallocx_prof() to pass usize_max and zero to ixallocx_prof_sample()
Packit 345191
      in the correct order.
Packit 345191
    + Fix prof_realloc() to call prof_free_sampled_object() after calling
Packit 345191
      prof_malloc_sample_object().  Prior to this fix, if tctx and old_tctx were
Packit 345191
      the same, the tctx could have been prematurely destroyed.
Packit 345191
  - Fix portability bugs:
Packit 345191
    + Don't bitshift by negative amounts when encoding/decoding run sizes in
Packit 345191
      chunk header maps.  This affected systems with page sizes greater than 8
Packit 345191
      KiB.
Packit 345191
    + Rename index_t to szind_t to avoid an existing type on Solaris.
Packit 345191
    + Add JEMALLOC_CXX_THROW to the memalign() function prototype, in order to
Packit 345191
      match glibc and avoid compilation errors when including both
Packit 345191
      jemalloc/jemalloc.h and malloc.h in C++ code.
Packit 345191
    + Don't assume that /bin/sh is appropriate when running size_classes.sh
Packit 345191
      during configuration.
Packit 345191
    + Consider __sparcv9 a synonym for __sparc64__ when defining LG_QUANTUM.
Packit 345191
    + Link tests to librt if it contains clock_gettime(2).
Packit 345191
Packit 345191
* 4.0.0 (August 17, 2015)
Packit 345191
Packit 345191
  This version contains many speed and space optimizations, both minor and
Packit 345191
  major.  The major themes are generalization, unification, and simplification.
Packit 345191
  Although many of these optimizations cause no visible behavior change, their
Packit 345191
  cumulative effect is substantial.
Packit 345191
Packit 345191
  New features:
Packit 345191
  - Normalize size class spacing to be consistent across the complete size
Packit 345191
    range.  By default there are four size classes per size doubling, but this
Packit 345191
    is now configurable via the --with-lg-size-class-group option.  Also add the
Packit 345191
    --with-lg-page, --with-lg-page-sizes, --with-lg-quantum, and
Packit 345191
    --with-lg-tiny-min options, which can be used to tweak page and size class
Packit 345191
    settings.  Impacts:
Packit 345191
    + Worst case performance for incrementally growing/shrinking reallocation
Packit 345191
      is improved because there are far fewer size classes, and therefore
Packit 345191
      copying happens less often.
Packit 345191
    + Internal fragmentation is limited to 20% for all but the smallest size
Packit 345191
      classes (those less than four times the quantum).  (1B + 4 KiB)
Packit 345191
      and (1B + 4 MiB) previously suffered nearly 50% internal fragmentation.
Packit 345191
    + Chunk fragmentation tends to be lower because there are fewer distinct run
Packit 345191
      sizes to pack.
Packit 345191
  - Add support for explicit tcaches.  The "tcache.create", "tcache.flush", and
Packit 345191
    "tcache.destroy" mallctls control tcache lifetime and flushing, and the
Packit 345191
    MALLOCX_TCACHE(tc) and MALLOCX_TCACHE_NONE flags to the *allocx() API
Packit 345191
    control which tcache is used for each operation.
Packit 345191
  - Implement per thread heap profiling, as well as the ability to
Packit 345191
    enable/disable heap profiling on a per thread basis.  Add the "prof.reset",
Packit 345191
    "prof.lg_sample", "thread.prof.name", "thread.prof.active",
Packit 345191
    "opt.prof_thread_active_init", "prof.thread_active_init", and
Packit 345191
    "thread.prof.active" mallctls.
Packit 345191
  - Add support for per arena application-specified chunk allocators, configured
Packit 345191
    via the "arena..chunk_hooks" mallctl.
Packit 345191
  - Refactor huge allocation to be managed by arenas, so that arenas now
Packit 345191
    function as general purpose independent allocators.  This is important in
Packit 345191
    the context of user-specified chunk allocators, aside from the scalability
Packit 345191
    benefits.  Related new statistics:
Packit 345191
    + The "stats.arenas..huge.allocated", "stats.arenas..huge.nmalloc",
Packit 345191
      "stats.arenas..huge.ndalloc", and "stats.arenas..huge.nrequests"
Packit 345191
      mallctls provide high level per arena huge allocation statistics.
Packit 345191
    + The "arenas.nhchunks", "arenas.hchunk..size",
Packit 345191
      "stats.arenas..hchunks.<j>.nmalloc",
Packit 345191
      "stats.arenas..hchunks.<j>.ndalloc",
Packit 345191
      "stats.arenas..hchunks.<j>.nrequests", and
Packit 345191
      "stats.arenas..hchunks.<j>.curhchunks" mallctls provide per size class
Packit 345191
      statistics.
Packit 345191
  - Add the 'util' column to malloc_stats_print() output, which reports the
Packit 345191
    proportion of available regions that are currently in use for each small
Packit 345191
    size class.
Packit 345191
  - Add "alloc" and "free" modes for for junk filling (see the "opt.junk"
Packit 345191
    mallctl), so that it is possible to separately enable junk filling for
Packit 345191
    allocation versus deallocation.
Packit 345191
  - Add the jemalloc-config script, which provides information about how
Packit 345191
    jemalloc was configured, and how to integrate it into application builds.
Packit 345191
  - Add metadata statistics, which are accessible via the "stats.metadata",
Packit 345191
    "stats.arenas..metadata.mapped", and
Packit 345191
    "stats.arenas..metadata.allocated" mallctls.
Packit 345191
  - Add the "stats.resident" mallctl, which reports the upper limit of
Packit 345191
    physically resident memory mapped by the allocator.
Packit 345191
  - Add per arena control over unused dirty page purging, via the
Packit 345191
    "arenas.lg_dirty_mult", "arena..lg_dirty_mult", and
Packit 345191
    "stats.arenas..lg_dirty_mult" mallctls.
Packit 345191
  - Add the "prof.gdump" mallctl, which makes it possible to toggle the gdump
Packit 345191
    feature on/off during program execution.
Packit 345191
  - Add sdallocx(), which implements sized deallocation.  The primary
Packit 345191
    optimization over dallocx() is the removal of a metadata read, which often
Packit 345191
    suffers an L1 cache miss.
Packit 345191
  - Add missing header includes in jemalloc/jemalloc.h, so that applications
Packit 345191
    only have to #include <jemalloc/jemalloc.h>.
Packit 345191
  - Add support for additional platforms:
Packit 345191
    + Bitrig
Packit 345191
    + Cygwin
Packit 345191
    + DragonFlyBSD
Packit 345191
    + iOS
Packit 345191
    + OpenBSD
Packit 345191
    + OpenRISC/or1k
Packit 345191
Packit 345191
  Optimizations:
Packit 345191
  - Maintain dirty runs in per arena LRUs rather than in per arena trees of
Packit 345191
    dirty-run-containing chunks.  In practice this change significantly reduces
Packit 345191
    dirty page purging volume.
Packit 345191
  - Integrate whole chunks into the unused dirty page purging machinery.  This
Packit 345191
    reduces the cost of repeated huge allocation/deallocation, because it
Packit 345191
    effectively introduces a cache of chunks.
Packit 345191
  - Split the arena chunk map into two separate arrays, in order to increase
Packit 345191
    cache locality for the frequently accessed bits.
Packit 345191
  - Move small run metadata out of runs, into arena chunk headers.  This reduces
Packit 345191
    run fragmentation, smaller runs reduce external fragmentation for small size
Packit 345191
    classes, and packed (less uniformly aligned) metadata layout improves CPU
Packit 345191
    cache set distribution.
Packit 345191
  - Randomly distribute large allocation base pointer alignment relative to page
Packit 345191
    boundaries in order to more uniformly utilize CPU cache sets.  This can be
Packit 345191
    disabled via the --disable-cache-oblivious configure option, and queried via
Packit 345191
    the "config.cache_oblivious" mallctl.
Packit 345191
  - Micro-optimize the fast paths for the public API functions.
Packit 345191
  - Refactor thread-specific data to reside in a single structure.  This assures
Packit 345191
    that only a single TLS read is necessary per call into the public API.
Packit 345191
  - Implement in-place huge allocation growing and shrinking.
Packit 345191
  - Refactor rtree (radix tree for chunk lookups) to be lock-free, and make
Packit 345191
    additional optimizations that reduce maximum lookup depth to one or two
Packit 345191
    levels.  This resolves what was a concurrency bottleneck for per arena huge
Packit 345191
    allocation, because a global data structure is critical for determining
Packit 345191
    which arenas own which huge allocations.
Packit 345191
Packit 345191
  Incompatible changes:
Packit 345191
  - Replace --enable-cc-silence with --disable-cc-silence to suppress spurious
Packit 345191
    warnings by default.
Packit 345191
  - Assure that the constness of malloc_usable_size()'s return type matches that
Packit 345191
    of the system implementation.
Packit 345191
  - Change the heap profile dump format to support per thread heap profiling,
Packit 345191
    rename pprof to jeprof, and enhance it with the --thread=<n> option.  As a
Packit 345191
    result, the bundled jeprof must now be used rather than the upstream
Packit 345191
    (gperftools) pprof.
Packit 345191
  - Disable "opt.prof_final" by default, in order to avoid atexit(3), which can
Packit 345191
    internally deadlock on some platforms.
Packit 345191
  - Change the "arenas.nlruns" mallctl type from size_t to unsigned.
Packit 345191
  - Replace the "stats.arenas..bins.<j>.allocated" mallctl with
Packit 345191
    "stats.arenas..bins.<j>.curregs".
Packit 345191
  - Ignore MALLOC_CONF in set{uid,gid,cap} binaries.
Packit 345191
  - Ignore MALLOCX_ARENA(a) in dallocx(), in favor of using the
Packit 345191
    MALLOCX_TCACHE(tc) and MALLOCX_TCACHE_NONE flags to control tcache usage.
Packit 345191
Packit 345191
  Removed features:
Packit 345191
  - Remove the *allocm() API, which is superseded by the *allocx() API.
Packit 345191
  - Remove the --enable-dss options, and make dss non-optional on all platforms
Packit 345191
    which support sbrk(2).
Packit 345191
  - Remove the "arenas.purge" mallctl, which was obsoleted by the
Packit 345191
    "arena..purge" mallctl in 3.1.0.
Packit 345191
  - Remove the unnecessary "opt.valgrind" mallctl; jemalloc automatically
Packit 345191
    detects whether it is running inside Valgrind.
Packit 345191
  - Remove the "stats.huge.allocated", "stats.huge.nmalloc", and
Packit 345191
    "stats.huge.ndalloc" mallctls.
Packit 345191
  - Remove the --enable-mremap option.
Packit 345191
  - Remove the "stats.chunks.current", "stats.chunks.total", and
Packit 345191
    "stats.chunks.high" mallctls.
Packit 345191
Packit 345191
  Bug fixes:
Packit 345191
  - Fix the cactive statistic to decrease (rather than increase) when active
Packit 345191
    memory decreases.  This regression was first released in 3.5.0.
Packit 345191
  - Fix OOM handling in memalign() and valloc().  A variant of this bug existed
Packit 345191
    in all releases since 2.0.0, which introduced these functions.
Packit 345191
  - Fix an OOM-related regression in arena_tcache_fill_small(), which could
Packit 345191
    cause cache corruption on OOM.  This regression was present in all releases
Packit 345191
    from 2.2.0 through 3.6.0.
Packit 345191
  - Fix size class overflow handling for malloc(), posix_memalign(), memalign(),
Packit 345191
    calloc(), and realloc() when profiling is enabled.
Packit 345191
  - Fix the "arena..dss" mallctl to return an error if "primary" or
Packit 345191
    "secondary" precedence is specified, but sbrk(2) is not supported.
Packit 345191
  - Fix fallback lg_floor() implementations to handle extremely large inputs.
Packit 345191
  - Ensure the default purgeable zone is after the default zone on OS X.
Packit 345191
  - Fix latent bugs in atomic_*().
Packit 345191
  - Fix the "arena..dss" mallctl to handle read-only calls.
Packit 345191
  - Fix tls_model configuration to enable the initial-exec model when possible.
Packit 345191
  - Mark malloc_conf as a weak symbol so that the application can override it.
Packit 345191
  - Correctly detect glibc's adaptive pthread mutexes.
Packit 345191
  - Fix the --without-export configure option.
Packit 345191
Packit 345191
* 3.6.0 (March 31, 2014)
Packit 345191
Packit 345191
  This version contains a critical bug fix for a regression present in 3.5.0 and
Packit 345191
  3.5.1.
Packit 345191
Packit 345191
  Bug fixes:
Packit 345191
  - Fix a regression in arena_chunk_alloc() that caused crashes during
Packit 345191
    small/large allocation if chunk allocation failed.  In the absence of this
Packit 345191
    bug, chunk allocation failure would result in allocation failure, e.g.  NULL
Packit 345191
    return from malloc().  This regression was introduced in 3.5.0.
Packit 345191
  - Fix backtracing for gcc intrinsics-based backtracing by specifying
Packit 345191
    -fno-omit-frame-pointer to gcc.  Note that the application (and all the
Packit 345191
    libraries it links to) must also be compiled with this option for
Packit 345191
    backtracing to be reliable.
Packit 345191
  - Use dss allocation precedence for huge allocations as well as small/large
Packit 345191
    allocations.
Packit 345191
  - Fix test assertion failure message formatting.  This bug did not manifest on
Packit 345191
    x86_64 systems because of implementation subtleties in va_list.
Packit 345191
  - Fix inconsequential test failures for hash and SFMT code.
Packit 345191
Packit 345191
  New features:
Packit 345191
  - Support heap profiling on FreeBSD.  This feature depends on the proc
Packit 345191
    filesystem being mounted during heap profile dumping.
Packit 345191
Packit 345191
* 3.5.1 (February 25, 2014)
Packit 345191
Packit 345191
  This version primarily addresses minor bugs in test code.
Packit 345191
Packit 345191
  Bug fixes:
Packit 345191
  - Configure Solaris/Illumos to use MADV_FREE.
Packit 345191
  - Fix junk filling for mremap(2)-based huge reallocation.  This is only
Packit 345191
    relevant if configuring with the --enable-mremap option specified.
Packit 345191
  - Avoid compilation failure if 'restrict' C99 keyword is not supported by the
Packit 345191
    compiler.
Packit 345191
  - Add a configure test for SSE2 rather than assuming it is usable on i686
Packit 345191
    systems.  This fixes test compilation errors, especially on 32-bit Linux
Packit 345191
    systems.
Packit 345191
  - Fix mallctl argument size mismatches (size_t vs. uint64_t) in the stats unit
Packit 345191
    test.
Packit 345191
  - Fix/remove flawed alignment-related overflow tests.
Packit 345191
  - Prevent compiler optimizations that could change backtraces in the
Packit 345191
    prof_accum unit test.
Packit 345191
Packit 345191
* 3.5.0 (January 22, 2014)
Packit 345191
Packit 345191
  This version focuses on refactoring and automated testing, though it also
Packit 345191
  includes some non-trivial heap profiling optimizations not mentioned below.
Packit 345191
Packit 345191
  New features:
Packit 345191
  - Add the *allocx() API, which is a successor to the experimental *allocm()
Packit 345191
    API.  The *allocx() functions are slightly simpler to use because they have
Packit 345191
    fewer parameters, they directly return the results of primary interest, and
Packit 345191
    mallocx()/rallocx() avoid the strict aliasing pitfall that
Packit 345191
    allocm()/rallocm() share with posix_memalign().  Note that *allocm() is
Packit 345191
    slated for removal in the next non-bugfix release.
Packit 345191
  - Add support for LinuxThreads.
Packit 345191
Packit 345191
  Bug fixes:
Packit 345191
  - Unless heap profiling is enabled, disable floating point code and don't link
Packit 345191
    with libm.  This, in combination with e.g. EXTRA_CFLAGS=-mno-sse on x64
Packit 345191
    systems, makes it possible to completely disable floating point register
Packit 345191
    use.  Some versions of glibc neglect to save/restore caller-saved floating
Packit 345191
    point registers during dynamic lazy symbol loading, and the symbol loading
Packit 345191
    code uses whatever malloc the application happens to have linked/loaded
Packit 345191
    with, the result being potential floating point register corruption.
Packit 345191
  - Report ENOMEM rather than EINVAL if an OOM occurs during heap profiling
Packit 345191
    backtrace creation in imemalign().  This bug impacted posix_memalign() and
Packit 345191
    aligned_alloc().
Packit 345191
  - Fix a file descriptor leak in a prof_dump_maps() error path.
Packit 345191
  - Fix prof_dump() to close the dump file descriptor for all relevant error
Packit 345191
    paths.
Packit 345191
  - Fix rallocm() to use the arena specified by the ALLOCM_ARENA(s) flag for
Packit 345191
    allocation, not just deallocation.
Packit 345191
  - Fix a data race for large allocation stats counters.
Packit 345191
  - Fix a potential infinite loop during thread exit.  This bug occurred on
Packit 345191
    Solaris, and could affect other platforms with similar pthreads TSD
Packit 345191
    implementations.
Packit 345191
  - Don't junk-fill reallocations unless usable size changes.  This fixes a
Packit 345191
    violation of the *allocx()/*allocm() semantics.
Packit 345191
  - Fix growing large reallocation to junk fill new space.
Packit 345191
  - Fix huge deallocation to junk fill when munmap is disabled.
Packit 345191
  - Change the default private namespace prefix from empty to je_, and change
Packit 345191
    --with-private-namespace-prefix so that it prepends an additional prefix
Packit 345191
    rather than replacing je_.  This reduces the likelihood of applications
Packit 345191
    which statically link jemalloc experiencing symbol name collisions.
Packit 345191
  - Add missing private namespace mangling (relevant when
Packit 345191
    --with-private-namespace is specified).
Packit 345191
  - Add and use JEMALLOC_INLINE_C so that static inline functions are marked as
Packit 345191
    static even for debug builds.
Packit 345191
  - Add a missing mutex unlock in a malloc_init_hard() error path.  In practice
Packit 345191
    this error path is never executed.
Packit 345191
  - Fix numerous bugs in malloc_strotumax() error handling/reporting.  These
Packit 345191
    bugs had no impact except for malformed inputs.
Packit 345191
  - Fix numerous bugs in malloc_snprintf().  These bugs were not exercised by
Packit 345191
    existing calls, so they had no impact.
Packit 345191
Packit 345191
* 3.4.1 (October 20, 2013)
Packit 345191
Packit 345191
  Bug fixes:
Packit 345191
  - Fix a race in the "arenas.extend" mallctl that could cause memory corruption
Packit 345191
    of internal data structures and subsequent crashes.
Packit 345191
  - Fix Valgrind integration flaws that caused Valgrind warnings about reads of
Packit 345191
    uninitialized memory in:
Packit 345191
    + arena chunk headers
Packit 345191
    + internal zero-initialized data structures (relevant to tcache and prof
Packit 345191
      code)
Packit 345191
  - Preserve errno during the first allocation.  A readlink(2) call during
Packit 345191
    initialization fails unless /etc/malloc.conf exists, so errno was typically
Packit 345191
    set during the first allocation prior to this fix.
Packit 345191
  - Fix compilation warnings reported by gcc 4.8.1.
Packit 345191
Packit 345191
* 3.4.0 (June 2, 2013)
Packit 345191
Packit 345191
  This version is essentially a small bugfix release, but the addition of
Packit 345191
  aarch64 support requires that the minor version be incremented.
Packit 345191
Packit 345191
  Bug fixes:
Packit 345191
  - Fix race-triggered deadlocks in chunk_record().  These deadlocks were
Packit 345191
    typically triggered by multiple threads concurrently deallocating huge
Packit 345191
    objects.
Packit 345191
Packit 345191
  New features:
Packit 345191
  - Add support for the aarch64 architecture.
Packit 345191
Packit 345191
* 3.3.1 (March 6, 2013)
Packit 345191
Packit 345191
  This version fixes bugs that are typically encountered only when utilizing
Packit 345191
  custom run-time options.
Packit 345191
Packit 345191
  Bug fixes:
Packit 345191
  - Fix a locking order bug that could cause deadlock during fork if heap
Packit 345191
    profiling were enabled.
Packit 345191
  - Fix a chunk recycling bug that could cause the allocator to lose track of
Packit 345191
    whether a chunk was zeroed.  On FreeBSD, NetBSD, and OS X, it could cause
Packit 345191
    corruption if allocating via sbrk(2) (unlikely unless running with the
Packit 345191
    "dss:primary" option specified).  This was completely harmless on Linux
Packit 345191
    unless using mlockall(2) (and unlikely even then, unless the
Packit 345191
    --disable-munmap configure option or the "dss:primary" option was
Packit 345191
    specified).  This regression was introduced in 3.1.0 by the
Packit 345191
    mlockall(2)/madvise(2) interaction fix.
Packit 345191
  - Fix TLS-related memory corruption that could occur during thread exit if the
Packit 345191
    thread never allocated memory.  Only the quarantine and prof facilities were
Packit 345191
    susceptible.
Packit 345191
  - Fix two quarantine bugs:
Packit 345191
    + Internal reallocation of the quarantined object array leaked the old
Packit 345191
      array.
Packit 345191
    + Reallocation failure for internal reallocation of the quarantined object
Packit 345191
      array (very unlikely) resulted in memory corruption.
Packit 345191
  - Fix Valgrind integration to annotate all internally allocated memory in a
Packit 345191
    way that keeps Valgrind happy about internal data structure access.
Packit 345191
  - Fix building for s390 systems.
Packit 345191
Packit 345191
* 3.3.0 (January 23, 2013)
Packit 345191
Packit 345191
  This version includes a few minor performance improvements in addition to the
Packit 345191
  listed new features and bug fixes.
Packit 345191
Packit 345191
  New features:
Packit 345191
  - Add clipping support to lg_chunk option processing.
Packit 345191
  - Add the --enable-ivsalloc option.
Packit 345191
  - Add the --without-export option.
Packit 345191
  - Add the --disable-zone-allocator option.
Packit 345191
Packit 345191
  Bug fixes:
Packit 345191
  - Fix "arenas.extend" mallctl to output the number of arenas.
Packit 345191
  - Fix chunk_recycle() to unconditionally inform Valgrind that returned memory
Packit 345191
    is undefined.
Packit 345191
  - Fix build break on FreeBSD related to alloca.h.
Packit 345191
Packit 345191
* 3.2.0 (November 9, 2012)
Packit 345191
Packit 345191
  In addition to a couple of bug fixes, this version modifies page run
Packit 345191
  allocation and dirty page purging algorithms in order to better control
Packit 345191
  page-level virtual memory fragmentation.
Packit 345191
Packit 345191
  Incompatible changes:
Packit 345191
  - Change the "opt.lg_dirty_mult" default from 5 to 3 (32:1 to 8:1).
Packit 345191
Packit 345191
  Bug fixes:
Packit 345191
  - Fix dss/mmap allocation precedence code to use recyclable mmap memory only
Packit 345191
    after primary dss allocation fails.
Packit 345191
  - Fix deadlock in the "arenas.purge" mallctl.  This regression was introduced
Packit 345191
    in 3.1.0 by the addition of the "arena..purge" mallctl.
Packit 345191
Packit 345191
* 3.1.0 (October 16, 2012)
Packit 345191
Packit 345191
  New features:
Packit 345191
  - Auto-detect whether running inside Valgrind, thus removing the need to
Packit 345191
    manually specify MALLOC_CONF=valgrind:true.
Packit 345191
  - Add the "arenas.extend" mallctl, which allows applications to create
Packit 345191
    manually managed arenas.
Packit 345191
  - Add the ALLOCM_ARENA() flag for {,r,d}allocm().
Packit 345191
  - Add the "opt.dss", "arena..dss", and "stats.arenas..dss" mallctls,
Packit 345191
    which provide control over dss/mmap precedence.
Packit 345191
  - Add the "arena..purge" mallctl, which obsoletes "arenas.purge".
Packit 345191
  - Define LG_QUANTUM for hppa.
Packit 345191
Packit 345191
  Incompatible changes:
Packit 345191
  - Disable tcache by default if running inside Valgrind, in order to avoid
Packit 345191
    making unallocated objects appear reachable to Valgrind.
Packit 345191
  - Drop const from malloc_usable_size() argument on Linux.
Packit 345191
Packit 345191
  Bug fixes:
Packit 345191
  - Fix heap profiling crash if sampled object is freed via realloc(p, 0).
Packit 345191
  - Remove const from __*_hook variable declarations, so that glibc can modify
Packit 345191
    them during process forking.
Packit 345191
  - Fix mlockall(2)/madvise(2) interaction.
Packit 345191
  - Fix fork(2)-related deadlocks.
Packit 345191
  - Fix error return value for "thread.tcache.enabled" mallctl.
Packit 345191
Packit 345191
* 3.0.0 (May 11, 2012)
Packit 345191
Packit 345191
  Although this version adds some major new features, the primary focus is on
Packit 345191
  internal code cleanup that facilitates maintainability and portability, most
Packit 345191
  of which is not reflected in the ChangeLog.  This is the first release to
Packit 345191
  incorporate substantial contributions from numerous other developers, and the
Packit 345191
  result is a more broadly useful allocator (see the git revision history for
Packit 345191
  contribution details).  Note that the license has been unified, thanks to
Packit 345191
  Facebook granting a license under the same terms as the other copyright
Packit 345191
  holders (see COPYING).
Packit 345191
Packit 345191
  New features:
Packit 345191
  - Implement Valgrind support, redzones, and quarantine.
Packit 345191
  - Add support for additional platforms:
Packit 345191
    + FreeBSD
Packit 345191
    + Mac OS X Lion
Packit 345191
    + MinGW
Packit 345191
    + Windows (no support yet for replacing the system malloc)
Packit 345191
  - Add support for additional architectures:
Packit 345191
    + MIPS
Packit 345191
    + SH4
Packit 345191
    + Tilera
Packit 345191
  - Add support for cross compiling.
Packit 345191
  - Add nallocm(), which rounds a request size up to the nearest size class
Packit 345191
    without actually allocating.
Packit 345191
  - Implement aligned_alloc() (blame C11).
Packit 345191
  - Add the "thread.tcache.enabled" mallctl.
Packit 345191
  - Add the "opt.prof_final" mallctl.
Packit 345191
  - Update pprof (from gperftools 2.0).
Packit 345191
  - Add the --with-mangling option.
Packit 345191
  - Add the --disable-experimental option.
Packit 345191
  - Add the --disable-munmap option, and make it the default on Linux.
Packit 345191
  - Add the --enable-mremap option, which disables use of mremap(2) by default.
Packit 345191
Packit 345191
  Incompatible changes:
Packit 345191
  - Enable stats by default.
Packit 345191
  - Enable fill by default.
Packit 345191
  - Disable lazy locking by default.
Packit 345191
  - Rename the "tcache.flush" mallctl to "thread.tcache.flush".
Packit 345191
  - Rename the "arenas.pagesize" mallctl to "arenas.page".
Packit 345191
  - Change the "opt.lg_prof_sample" default from 0 to 19 (1 B to 512 KiB).
Packit 345191
  - Change the "opt.prof_accum" default from true to false.
Packit 345191
Packit 345191
  Removed features:
Packit 345191
  - Remove the swap feature, including the "config.swap", "swap.avail",
Packit 345191
    "swap.prezeroed", "swap.nfds", and "swap.fds" mallctls.
Packit 345191
  - Remove highruns statistics, including the
Packit 345191
    "stats.arenas..bins.<j>.highruns" and
Packit 345191
    "stats.arenas..lruns.<j>.highruns" mallctls.
Packit 345191
  - As part of small size class refactoring, remove the "opt.lg_[qc]space_max",
Packit 345191
    "arenas.cacheline", "arenas.subpage", "arenas.[tqcs]space_{min,max}", and
Packit 345191
    "arenas.[tqcs]bins" mallctls.
Packit 345191
  - Remove the "arenas.chunksize" mallctl.
Packit 345191
  - Remove the "opt.lg_prof_tcmax" option.
Packit 345191
  - Remove the "opt.lg_prof_bt_max" option.
Packit 345191
  - Remove the "opt.lg_tcache_gc_sweep" option.
Packit 345191
  - Remove the --disable-tiny option, including the "config.tiny" mallctl.
Packit 345191
  - Remove the --enable-dynamic-page-shift configure option.
Packit 345191
  - Remove the --enable-sysv configure option.
Packit 345191
Packit 345191
  Bug fixes:
Packit 345191
  - Fix a statistics-related bug in the "thread.arena" mallctl that could cause
Packit 345191
    invalid statistics and crashes.
Packit 345191
  - Work around TLS deallocation via free() on Linux.  This bug could cause
Packit 345191
    write-after-free memory corruption.
Packit 345191
  - Fix a potential deadlock that could occur during interval- and
Packit 345191
    growth-triggered heap profile dumps.
Packit 345191
  - Fix large calloc() zeroing bugs due to dropping chunk map unzeroed flags.
Packit 345191
  - Fix chunk_alloc_dss() to stop claiming memory is zeroed.  This bug could
Packit 345191
    cause memory corruption and crashes with --enable-dss specified.
Packit 345191
  - Fix fork-related bugs that could cause deadlock in children between fork
Packit 345191
    and exec.
Packit 345191
  - Fix malloc_stats_print() to honor 'b' and 'l' in the opts parameter.
Packit 345191
  - Fix realloc(p, 0) to act like free(p).
Packit 345191
  - Do not enforce minimum alignment in memalign().
Packit 345191
  - Check for NULL pointer in malloc_usable_size().
Packit 345191
  - Fix an off-by-one heap profile statistics bug that could be observed in
Packit 345191
    interval- and growth-triggered heap profiles.
Packit 345191
  - Fix the "epoch" mallctl to update cached stats even if the passed in epoch
Packit 345191
    is 0.
Packit 345191
  - Fix bin->runcur management to fix a layout policy bug.  This bug did not
Packit 345191
    affect correctness.
Packit 345191
  - Fix a bug in choose_arena_hard() that potentially caused more arenas to be
Packit 345191
    initialized than necessary.
Packit 345191
  - Add missing "opt.lg_tcache_max" mallctl implementation.
Packit 345191
  - Use glibc allocator hooks to make mixed allocator usage less likely.
Packit 345191
  - Fix build issues for --disable-tcache.
Packit 345191
  - Don't mangle pthread_create() when --with-private-namespace is specified.
Packit 345191
Packit 345191
* 2.2.5 (November 14, 2011)
Packit 345191
Packit 345191
  Bug fixes:
Packit 345191
  - Fix huge_ralloc() race when using mremap(2).  This is a serious bug that
Packit 345191
    could cause memory corruption and/or crashes.
Packit 345191
  - Fix huge_ralloc() to maintain chunk statistics.
Packit 345191
  - Fix malloc_stats_print(..., "a") output.
Packit 345191
Packit 345191
* 2.2.4 (November 5, 2011)
Packit 345191
Packit 345191
  Bug fixes:
Packit 345191
  - Initialize arenas_tsd before using it.  This bug existed for 2.2.[0-3], as
Packit 345191
    well as for --disable-tls builds in earlier releases.
Packit 345191
  - Do not assume a 4 KiB page size in test/rallocm.c.
Packit 345191
Packit 345191
* 2.2.3 (August 31, 2011)
Packit 345191
Packit 345191
  This version fixes numerous bugs related to heap profiling.
Packit 345191
Packit 345191
  Bug fixes:
Packit 345191
  - Fix a prof-related race condition.  This bug could cause memory corruption,
Packit 345191
    but only occurred in non-default configurations (prof_accum:false).
Packit 345191
  - Fix off-by-one backtracing issues (make sure that prof_alloc_prep() is
Packit 345191
    excluded from backtraces).
Packit 345191
  - Fix a prof-related bug in realloc() (only triggered by OOM errors).
Packit 345191
  - Fix prof-related bugs in allocm() and rallocm().
Packit 345191
  - Fix prof_tdata_cleanup() for --disable-tls builds.
Packit 345191
  - Fix a relative include path, to fix objdir builds.
Packit 345191
Packit 345191
* 2.2.2 (July 30, 2011)
Packit 345191
Packit 345191
  Bug fixes:
Packit 345191
  - Fix a build error for --disable-tcache.
Packit 345191
  - Fix assertions in arena_purge() (for real this time).
Packit 345191
  - Add the --with-private-namespace option.  This is a workaround for symbol
Packit 345191
    conflicts that can inadvertently arise when using static libraries.
Packit 345191
Packit 345191
* 2.2.1 (March 30, 2011)
Packit 345191
Packit 345191
  Bug fixes:
Packit 345191
  - Implement atomic operations for x86/x64.  This fixes compilation failures
Packit 345191
    for versions of gcc that are still in wide use.
Packit 345191
  - Fix an assertion in arena_purge().
Packit 345191
Packit 345191
* 2.2.0 (March 22, 2011)
Packit 345191
Packit 345191
  This version incorporates several improvements to algorithms and data
Packit 345191
  structures that tend to reduce fragmentation and increase speed.
Packit 345191
Packit 345191
  New features:
Packit 345191
  - Add the "stats.cactive" mallctl.
Packit 345191
  - Update pprof (from google-perftools 1.7).
Packit 345191
  - Improve backtracing-related configuration logic, and add the
Packit 345191
    --disable-prof-libgcc option.
Packit 345191
Packit 345191
  Bug fixes:
Packit 345191
  - Change default symbol visibility from "internal", to "hidden", which
Packit 345191
    decreases the overhead of library-internal function calls.
Packit 345191
  - Fix symbol visibility so that it is also set on OS X.
Packit 345191
  - Fix a build dependency regression caused by the introduction of the .pic.o
Packit 345191
    suffix for PIC object files.
Packit 345191
  - Add missing checks for mutex initialization failures.
Packit 345191
  - Don't use libgcc-based backtracing except on x64, where it is known to work.
Packit 345191
  - Fix deadlocks on OS X that were due to memory allocation in
Packit 345191
    pthread_mutex_lock().
Packit 345191
  - Heap profiling-specific fixes:
Packit 345191
    + Fix memory corruption due to integer overflow in small region index
Packit 345191
      computation, when using a small enough sample interval that profiling
Packit 345191
      context pointers are stored in small run headers.
Packit 345191
    + Fix a bootstrap ordering bug that only occurred with TLS disabled.
Packit 345191
    + Fix a rallocm() rsize bug.
Packit 345191
    + Fix error detection bugs for aligned memory allocation.
Packit 345191
Packit 345191
* 2.1.3 (March 14, 2011)
Packit 345191
Packit 345191
  Bug fixes:
Packit 345191
  - Fix a cpp logic regression (due to the "thread.{de,}allocatedp" mallctl fix
Packit 345191
    for OS X in 2.1.2).
Packit 345191
  - Fix a "thread.arena" mallctl bug.
Packit 345191
  - Fix a thread cache stats merging bug.
Packit 345191
Packit 345191
* 2.1.2 (March 2, 2011)
Packit 345191
Packit 345191
  Bug fixes:
Packit 345191
  - Fix "thread.{de,}allocatedp" mallctl for OS X.
Packit 345191
  - Add missing jemalloc.a to build system.
Packit 345191
Packit 345191
* 2.1.1 (January 31, 2011)
Packit 345191
Packit 345191
  Bug fixes:
Packit 345191
  - Fix aligned huge reallocation (affected allocm()).
Packit 345191
  - Fix the ALLOCM_LG_ALIGN macro definition.
Packit 345191
  - Fix a heap dumping deadlock.
Packit 345191
  - Fix a "thread.arena" mallctl bug.
Packit 345191
Packit 345191
* 2.1.0 (December 3, 2010)
Packit 345191
Packit 345191
  This version incorporates some optimizations that can't quite be considered
Packit 345191
  bug fixes.
Packit 345191
Packit 345191
  New features:
Packit 345191
  - Use Linux's mremap(2) for huge object reallocation when possible.
Packit 345191
  - Avoid locking in mallctl*() when possible.
Packit 345191
  - Add the "thread.[de]allocatedp" mallctl's.
Packit 345191
  - Convert the manual page source from roff to DocBook, and generate both roff
Packit 345191
    and HTML manuals.
Packit 345191
Packit 345191
  Bug fixes:
Packit 345191
  - Fix a crash due to incorrect bootstrap ordering.  This only impacted
Packit 345191
    --enable-debug --enable-dss configurations.
Packit 345191
  - Fix a minor statistics bug for mallctl("swap.avail", ...).
Packit 345191
Packit 345191
* 2.0.1 (October 29, 2010)
Packit 345191
Packit 345191
  Bug fixes:
Packit 345191
  - Fix a race condition in heap profiling that could cause undefined behavior
Packit 345191
    if "opt.prof_accum" were disabled.
Packit 345191
  - Add missing mutex unlocks for some OOM error paths in the heap profiling
Packit 345191
    code.
Packit 345191
  - Fix a compilation error for non-C99 builds.
Packit 345191
Packit 345191
* 2.0.0 (October 24, 2010)
Packit 345191
Packit 345191
  This version focuses on the experimental *allocm() API, and on improved
Packit 345191
  run-time configuration/introspection.  Nonetheless, numerous performance
Packit 345191
  improvements are also included.
Packit 345191
Packit 345191
  New features:
Packit 345191
  - Implement the experimental {,r,s,d}allocm() API, which provides a superset
Packit 345191
    of the functionality available via malloc(), calloc(), posix_memalign(),
Packit 345191
    realloc(), malloc_usable_size(), and free().  These functions can be used to
Packit 345191
    allocate/reallocate aligned zeroed memory, ask for optional extra memory
Packit 345191
    during reallocation, prevent object movement during reallocation, etc.
Packit 345191
  - Replace JEMALLOC_OPTIONS/JEMALLOC_PROF_PREFIX with MALLOC_CONF, which is
Packit 345191
    more human-readable, and more flexible.  For example:
Packit 345191
      JEMALLOC_OPTIONS=AJP
Packit 345191
    is now:
Packit 345191
      MALLOC_CONF=abort:true,fill:true,stats_print:true
Packit 345191
  - Port to Apple OS X.  Sponsored by Mozilla.
Packit 345191
  - Make it possible for the application to control thread-->arena mappings via
Packit 345191
    the "thread.arena" mallctl.
Packit 345191
  - Add compile-time support for all TLS-related functionality via pthreads TSD.
Packit 345191
    This is mainly of interest for OS X, which does not support TLS, but has a
Packit 345191
    TSD implementation with similar performance.
Packit 345191
  - Override memalign() and valloc() if they are provided by the system.
Packit 345191
  - Add the "arenas.purge" mallctl, which can be used to synchronously purge all
Packit 345191
    dirty unused pages.
Packit 345191
  - Make cumulative heap profiling data optional, so that it is possible to
Packit 345191
    limit the amount of memory consumed by heap profiling data structures.
Packit 345191
  - Add per thread allocation counters that can be accessed via the
Packit 345191
    "thread.allocated" and "thread.deallocated" mallctls.
Packit 345191
Packit 345191
  Incompatible changes:
Packit 345191
  - Remove JEMALLOC_OPTIONS and malloc_options (see MALLOC_CONF above).
Packit 345191
  - Increase default backtrace depth from 4 to 128 for heap profiling.
Packit 345191
  - Disable interval-based profile dumps by default.
Packit 345191
Packit 345191
  Bug fixes:
Packit 345191
  - Remove bad assertions in fork handler functions.  These assertions could
Packit 345191
    cause aborts for some combinations of configure settings.
Packit 345191
  - Fix strerror_r() usage to deal with non-standard semantics in GNU libc.
Packit 345191
  - Fix leak context reporting.  This bug tended to cause the number of contexts
Packit 345191
    to be underreported (though the reported number of objects and bytes were
Packit 345191
    correct).
Packit 345191
  - Fix a realloc() bug for large in-place growing reallocation.  This bug could
Packit 345191
    cause memory corruption, but it was hard to trigger.
Packit 345191
  - Fix an allocation bug for small allocations that could be triggered if
Packit 345191
    multiple threads raced to create a new run of backing pages.
Packit 345191
  - Enhance the heap profiler to trigger samples based on usable size, rather
Packit 345191
    than request size.
Packit 345191
  - Fix a heap profiling bug due to sometimes losing track of requested object
Packit 345191
    size for sampled objects.
Packit 345191
Packit 345191
* 1.0.3 (August 12, 2010)
Packit 345191
Packit 345191
  Bug fixes:
Packit 345191
  - Fix the libunwind-based implementation of stack backtracing (used for heap
Packit 345191
    profiling).  This bug could cause zero-length backtraces to be reported.
Packit 345191
  - Add a missing mutex unlock in library initialization code.  If multiple
Packit 345191
    threads raced to initialize malloc, some of them could end up permanently
Packit 345191
    blocked.
Packit 345191
Packit 345191
* 1.0.2 (May 11, 2010)
Packit 345191
Packit 345191
  Bug fixes:
Packit 345191
  - Fix junk filling of large objects, which could cause memory corruption.
Packit 345191
  - Add MAP_NORESERVE support for chunk mapping, because otherwise virtual
Packit 345191
    memory limits could cause swap file configuration to fail.  Contributed by
Packit 345191
    Jordan DeLong.
Packit 345191
Packit 345191
* 1.0.1 (April 14, 2010)
Packit 345191
Packit 345191
  Bug fixes:
Packit 345191
  - Fix compilation when --enable-fill is specified.
Packit 345191
  - Fix threads-related profiling bugs that affected accuracy and caused memory
Packit 345191
    to be leaked during thread exit.
Packit 345191
  - Fix dirty page purging race conditions that could cause crashes.
Packit 345191
  - Fix crash in tcache flushing code during thread destruction.
Packit 345191
Packit 345191
* 1.0.0 (April 11, 2010)
Packit 345191
Packit 345191
  This release focuses on speed and run-time introspection.  Numerous
Packit 345191
  algorithmic improvements make this release substantially faster than its
Packit 345191
  predecessors.
Packit 345191
Packit 345191
  New features:
Packit 345191
  - Implement autoconf-based configuration system.
Packit 345191
  - Add mallctl*(), for the purposes of introspection and run-time
Packit 345191
    configuration.
Packit 345191
  - Make it possible for the application to manually flush a thread's cache, via
Packit 345191
    the "tcache.flush" mallctl.
Packit 345191
  - Base maximum dirty page count on proportion of active memory.
Packit 345191
  - Compute various additional run-time statistics, including per size class
Packit 345191
    statistics for large objects.
Packit 345191
  - Expose malloc_stats_print(), which can be called repeatedly by the
Packit 345191
    application.
Packit 345191
  - Simplify the malloc_message() signature to only take one string argument,
Packit 345191
    and incorporate an opaque data pointer argument for use by the application
Packit 345191
    in combination with malloc_stats_print().
Packit 345191
  - Add support for allocation backed by one or more swap files, and allow the
Packit 345191
    application to disable over-commit if swap files are in use.
Packit 345191
  - Implement allocation profiling and leak checking.
Packit 345191
Packit 345191
  Removed features:
Packit 345191
  - Remove the dynamic arena rebalancing code, since thread-specific caching
Packit 345191
    reduces its utility.
Packit 345191
Packit 345191
  Bug fixes:
Packit 345191
  - Modify chunk allocation to work when address space layout randomization
Packit 345191
    (ASLR) is in use.
Packit 345191
  - Fix thread cleanup bugs related to TLS destruction.
Packit 345191
  - Handle 0-size allocation requests in posix_memalign().
Packit 345191
  - Fix a chunk leak.  The leaked chunks were never touched, so this impacted
Packit 345191
    virtual memory usage, but not physical memory usage.
Packit 345191
Packit 345191
* linux_2008082[78]a (August 27/28, 2008)
Packit 345191
Packit 345191
  These snapshot releases are the simple result of incorporating Linux-specific
Packit 345191
  support into the FreeBSD malloc sources.
Packit 345191
Packit 345191
--------------------------------------------------------------------------------
Packit 345191
vim:filetype=text:textwidth=80