1*572c4311SfengbojiangFollowing are change highlights associated with official releases.  Important
2*572c4311Sfengbojiangbug fixes are all mentioned, but some internal enhancements are omitted here for
3*572c4311Sfengbojiangbrevity.  Much more detail can be found in the git revision history:
4*572c4311Sfengbojiang
5*572c4311Sfengbojiang    https://github.com/jemalloc/jemalloc
6*572c4311Sfengbojiang
7*572c4311Sfengbojiang* 5.1.0 (May 4th, 2018)
8*572c4311Sfengbojiang
9*572c4311Sfengbojiang  This release is primarily about fine-tuning, ranging from several new features
10*572c4311Sfengbojiang  to numerous notable performance and portability enhancements.  The release and
11*572c4311Sfengbojiang  prior dev versions have been running in multiple large scale applications for
12*572c4311Sfengbojiang  months, and the cumulative improvements are substantial in many cases.
13*572c4311Sfengbojiang
14*572c4311Sfengbojiang  Given the long and successful production runs, this release is likely a good
15*572c4311Sfengbojiang  candidate for applications to upgrade, from both jemalloc 5.0 and before.  For
16*572c4311Sfengbojiang  performance-critical applications, the newly added TUNING.md provides
17*572c4311Sfengbojiang  guidelines on jemalloc tuning.
18*572c4311Sfengbojiang
19*572c4311Sfengbojiang  New features:
20*572c4311Sfengbojiang  - Implement transparent huge page support for internal metadata.  (@interwq)
21*572c4311Sfengbojiang  - Add opt.thp to allow enabling / disabling transparent huge pages for all
22*572c4311Sfengbojiang    mappings.  (@interwq)
23*572c4311Sfengbojiang  - Add maximum background thread count option.  (@djwatson)
24*572c4311Sfengbojiang  - Allow prof_active to control opt.lg_prof_interval and prof.gdump.
25*572c4311Sfengbojiang    (@interwq)
26*572c4311Sfengbojiang  - Allow arena index lookup based on allocation addresses via mallctl.
27*572c4311Sfengbojiang    (@lionkov)
28*572c4311Sfengbojiang  - Allow disabling initial-exec TLS model.  (@davidtgoldblatt, @KenMacD)
29*572c4311Sfengbojiang  - Add opt.lg_extent_max_active_fit to set the max ratio between the size of
30*572c4311Sfengbojiang    the active extent selected (to split off from) and the size of the requested
31*572c4311Sfengbojiang    allocation.  (@interwq, @davidtgoldblatt)
32*572c4311Sfengbojiang  - Add retain_grow_limit to set the max size when growing virtual address
33*572c4311Sfengbojiang    space.  (@interwq)
34*572c4311Sfengbojiang  - Add mallctl interfaces:
35*572c4311Sfengbojiang    + arena.<i>.retain_grow_limit  (@interwq)
36*572c4311Sfengbojiang    + arenas.lookup  (@lionkov)
37*572c4311Sfengbojiang    + max_background_threads  (@djwatson)
38*572c4311Sfengbojiang    + opt.lg_extent_max_active_fit  (@interwq)
39*572c4311Sfengbojiang    + opt.max_background_threads  (@djwatson)
40*572c4311Sfengbojiang    + opt.metadata_thp  (@interwq)
41*572c4311Sfengbojiang    + opt.thp  (@interwq)
42*572c4311Sfengbojiang    + stats.metadata_thp  (@interwq)
43*572c4311Sfengbojiang
44*572c4311Sfengbojiang  Portability improvements:
45*572c4311Sfengbojiang  - Support GNU/kFreeBSD configuration.  (@paravoid)
46*572c4311Sfengbojiang  - Support m68k, nios2 and SH3 architectures.  (@paravoid)
47*572c4311Sfengbojiang  - Fall back to FD_CLOEXEC when O_CLOEXEC is unavailable.  (@zonyitoo)
48*572c4311Sfengbojiang  - Fix symbol listing for cross-compiling.  (@tamird)
49*572c4311Sfengbojiang  - Fix high bits computation on ARM.  (@davidtgoldblatt, @paravoid)
50*572c4311Sfengbojiang  - Disable the CPU_SPINWAIT macro for Power.  (@davidtgoldblatt, @marxin)
51*572c4311Sfengbojiang  - Fix MSVC 2015 & 2017 builds.  (@rustyx)
52*572c4311Sfengbojiang  - Improve RISC-V support.  (@EdSchouten)
53*572c4311Sfengbojiang  - Set name mangling script in strict mode.  (@nicolov)
54*572c4311Sfengbojiang  - Avoid MADV_HUGEPAGE on ARM.  (@marxin)
55*572c4311Sfengbojiang  - Modify configure to determine return value of strerror_r.
56*572c4311Sfengbojiang    (@davidtgoldblatt, @cferris1000)
57*572c4311Sfengbojiang  - Make sure CXXFLAGS is tested with CPP compiler.  (@nehaljwani)
58*572c4311Sfengbojiang  - Fix 32-bit build on MSVC.  (@rustyx)
59*572c4311Sfengbojiang  - Fix external symbol on MSVC.  (@maksqwe)
60*572c4311Sfengbojiang  - Avoid a printf format specifier warning.  (@jasone)
61*572c4311Sfengbojiang  - Add configure option --disable-initial-exec-tls which can allow jemalloc to
62*572c4311Sfengbojiang    be dynamically loaded after program startup.  (@davidtgoldblatt, @KenMacD)
63*572c4311Sfengbojiang  - AArch64: Add ILP32 support.  (@cmuellner)
64*572c4311Sfengbojiang  - Add --with-lg-vaddr configure option to support cross compiling.
65*572c4311Sfengbojiang    (@cmuellner, @davidtgoldblatt)
66*572c4311Sfengbojiang
67*572c4311Sfengbojiang  Optimizations and refactors:
68*572c4311Sfengbojiang  - Improve active extent fit with extent_max_active_fit.  This considerably
69*572c4311Sfengbojiang    reduces fragmentation over time and improves virtual memory and metadata
70*572c4311Sfengbojiang    usage.  (@davidtgoldblatt, @interwq)
71*572c4311Sfengbojiang  - Eagerly coalesce large extents to reduce fragmentation.  (@interwq)
72*572c4311Sfengbojiang  - sdallocx: only read size info when page aligned (i.e. possibly sampled),
73*572c4311Sfengbojiang    which speeds up the sized deallocation path significantly.  (@interwq)
74*572c4311Sfengbojiang  - Avoid attempting new mappings for in place expansion with retain, since
75*572c4311Sfengbojiang    it rarely succeeds in practice and causes high overhead.  (@interwq)
76*572c4311Sfengbojiang  - Refactor OOM handling in newImpl.  (@wqfish)
77*572c4311Sfengbojiang  - Add internal fine-grained logging functionality for debugging use.
78*572c4311Sfengbojiang    (@davidtgoldblatt)
79*572c4311Sfengbojiang  - Refactor arena / tcache interactions.  (@davidtgoldblatt)
80*572c4311Sfengbojiang  - Refactor extent management with dumpable flag.  (@davidtgoldblatt)
81*572c4311Sfengbojiang  - Add runtime detection of lazy purging.  (@interwq)
82*572c4311Sfengbojiang  - Use pairing heap instead of red-black tree for extents_avail.  (@djwatson)
83*572c4311Sfengbojiang  - Use sysctl on startup in FreeBSD.  (@trasz)
84*572c4311Sfengbojiang  - Use thread local prng state instead of atomic.  (@djwatson)
85*572c4311Sfengbojiang  - Make decay to always purge one more extent than before, because in
86*572c4311Sfengbojiang    practice large extents are usually the ones that cross the decay threshold.
87*572c4311Sfengbojiang    Purging the additional extent helps save memory as well as reduce VM
88*572c4311Sfengbojiang    fragmentation.  (@interwq)
89*572c4311Sfengbojiang  - Fast division by dynamic values.  (@davidtgoldblatt)
90*572c4311Sfengbojiang  - Improve the fit for aligned allocation.  (@interwq, @edwinsmith)
91*572c4311Sfengbojiang  - Refactor extent_t bitpacking.  (@rkmisra)
92*572c4311Sfengbojiang  - Optimize the generated assembly for ticker operations.  (@davidtgoldblatt)
93*572c4311Sfengbojiang  - Convert stats printing to use a structured text emitter.  (@davidtgoldblatt)
94*572c4311Sfengbojiang  - Remove preserve_lru feature for extents management.  (@djwatson)
95*572c4311Sfengbojiang  - Consolidate two memory loads into one on the fast deallocation path.
96*572c4311Sfengbojiang    (@davidtgoldblatt, @interwq)
97*572c4311Sfengbojiang
98*572c4311Sfengbojiang  Bug fixes (most of the issues are only relevant to jemalloc 5.0):
99*572c4311Sfengbojiang  - Fix deadlock with multithreaded fork in OS X.  (@davidtgoldblatt)
100*572c4311Sfengbojiang  - Validate returned file descriptor before use.  (@zonyitoo)
101*572c4311Sfengbojiang  - Fix a few background thread initialization and shutdown issues.  (@interwq)
102*572c4311Sfengbojiang  - Fix an extent coalesce + decay race by taking both coalescing extents off
103*572c4311Sfengbojiang    the LRU list.  (@interwq)
104*572c4311Sfengbojiang  - Fix potentially unbound increase during decay, caused by one thread keep
105*572c4311Sfengbojiang    stashing memory to purge while other threads generating new pages.  The
106*572c4311Sfengbojiang    number of pages to purge is checked to prevent this.  (@interwq)
107*572c4311Sfengbojiang  - Fix a FreeBSD bootstrap assertion.  (@strejda, @interwq)
108*572c4311Sfengbojiang  - Handle 32 bit mutex counters.  (@rkmisra)
109*572c4311Sfengbojiang  - Fix a indexing bug when creating background threads.  (@davidtgoldblatt,
110*572c4311Sfengbojiang    @binliu19)
111*572c4311Sfengbojiang  - Fix arguments passed to extent_init.  (@yuleniwo, @interwq)
112*572c4311Sfengbojiang  - Fix addresses used for ordering mutexes.  (@rkmisra)
113*572c4311Sfengbojiang  - Fix abort_conf processing during bootstrap.  (@interwq)
114*572c4311Sfengbojiang  - Fix include path order for out-of-tree builds.  (@cmuellner)
115*572c4311Sfengbojiang
116*572c4311Sfengbojiang  Incompatible changes:
117*572c4311Sfengbojiang  - Remove --disable-thp.  (@interwq)
118*572c4311Sfengbojiang  - Remove mallctl interfaces:
119*572c4311Sfengbojiang    + config.thp  (@interwq)
120*572c4311Sfengbojiang
121*572c4311Sfengbojiang  Documentation:
122*572c4311Sfengbojiang  - Add TUNING.md.  (@interwq, @davidtgoldblatt, @djwatson)
123*572c4311Sfengbojiang
124*572c4311Sfengbojiang* 5.0.1 (July 1, 2017)
125*572c4311Sfengbojiang
126*572c4311Sfengbojiang  This bugfix release fixes several issues, most of which are obscure enough
127*572c4311Sfengbojiang  that typical applications are not impacted.
128*572c4311Sfengbojiang
129*572c4311Sfengbojiang  Bug fixes:
130*572c4311Sfengbojiang  - Update decay->nunpurged before purging, in order to avoid potential update
131*572c4311Sfengbojiang    races and subsequent incorrect purging volume.  (@interwq)
132*572c4311Sfengbojiang  - Only abort on dlsym(3) error if the failure impacts an enabled feature (lazy
133*572c4311Sfengbojiang    locking and/or background threads).  This mitigates an initialization
134*572c4311Sfengbojiang    failure bug for which we still do not have a clear reproduction test case.
135*572c4311Sfengbojiang    (@interwq)
136*572c4311Sfengbojiang  - Modify tsd management so that it neither crashes nor leaks if a thread's
137*572c4311Sfengbojiang    only allocation activity is to call free() after TLS destructors have been
138*572c4311Sfengbojiang    executed.  This behavior was observed when operating with GNU libc, and is
139*572c4311Sfengbojiang    unlikely to be an issue with other libc implementations.  (@interwq)
140*572c4311Sfengbojiang  - Mask signals during background thread creation.  This prevents signals from
141*572c4311Sfengbojiang    being inadvertently delivered to background threads.  (@jasone,
142*572c4311Sfengbojiang    @davidtgoldblatt, @interwq)
143*572c4311Sfengbojiang  - Avoid inactivity checks within background threads, in order to prevent
144*572c4311Sfengbojiang    recursive mutex acquisition.  (@interwq)
145*572c4311Sfengbojiang  - Fix extent_grow_retained() to use the specified hooks when the
146*572c4311Sfengbojiang    arena.<i>.extent_hooks mallctl is used to override the default hooks.
147*572c4311Sfengbojiang    (@interwq)
148*572c4311Sfengbojiang  - Add missing reentrancy support for custom extent hooks which allocate.
149*572c4311Sfengbojiang    (@interwq)
150*572c4311Sfengbojiang  - Post-fork(2), re-initialize the list of tcaches associated with each arena
151*572c4311Sfengbojiang    to contain no tcaches except the forking thread's.  (@interwq)
152*572c4311Sfengbojiang  - Add missing post-fork(2) mutex reinitialization for extent_grow_mtx.  This
153*572c4311Sfengbojiang    fixes potential deadlocks after fork(2).  (@interwq)
154*572c4311Sfengbojiang  - Enforce minimum autoconf version (currently 2.68), since 2.63 is known to
155*572c4311Sfengbojiang    generate corrupt configure scripts.  (@jasone)
156*572c4311Sfengbojiang  - Ensure that the configured page size (--with-lg-page) is no larger than the
157*572c4311Sfengbojiang    configured huge page size (--with-lg-hugepage).  (@jasone)
158*572c4311Sfengbojiang
159*572c4311Sfengbojiang* 5.0.0 (June 13, 2017)
160*572c4311Sfengbojiang
161*572c4311Sfengbojiang  Unlike all previous jemalloc releases, this release does not use naturally
162*572c4311Sfengbojiang  aligned "chunks" for virtual memory management, and instead uses page-aligned
163*572c4311Sfengbojiang  "extents".  This change has few externally visible effects, but the internal
164*572c4311Sfengbojiang  impacts are... extensive.  Many other internal changes combine to make this
165*572c4311Sfengbojiang  the most cohesively designed version of jemalloc so far, with ample
166*572c4311Sfengbojiang  opportunity for further enhancements.
167*572c4311Sfengbojiang
168*572c4311Sfengbojiang  Continuous integration is now an integral aspect of development thanks to the
169*572c4311Sfengbojiang  efforts of @davidtgoldblatt, and the dev branch tends to remain reasonably
170*572c4311Sfengbojiang  stable on the tested platforms (Linux, FreeBSD, macOS, and Windows).  As a
171*572c4311Sfengbojiang  side effect the official release frequency may decrease over time.
172*572c4311Sfengbojiang
173*572c4311Sfengbojiang  New features:
174*572c4311Sfengbojiang  - Implement optional per-CPU arena support; threads choose which arena to use
175*572c4311Sfengbojiang    based on current CPU rather than on fixed thread-->arena associations.
176*572c4311Sfengbojiang    (@interwq)
177*572c4311Sfengbojiang  - Implement two-phase decay of unused dirty pages.  Pages transition from
178*572c4311Sfengbojiang    dirty-->muzzy-->clean, where the first phase transition relies on
179*572c4311Sfengbojiang    madvise(... MADV_FREE) semantics, and the second phase transition discards
180*572c4311Sfengbojiang    pages such that they are replaced with demand-zeroed pages on next access.
181*572c4311Sfengbojiang    (@jasone)
182*572c4311Sfengbojiang  - Increase decay time resolution from seconds to milliseconds.  (@jasone)
183*572c4311Sfengbojiang  - Implement opt-in per CPU background threads, and use them for asynchronous
184*572c4311Sfengbojiang    decay-driven unused dirty page purging.  (@interwq)
185*572c4311Sfengbojiang  - Add mutex profiling, which collects a variety of statistics useful for
186*572c4311Sfengbojiang    diagnosing overhead/contention issues.  (@interwq)
187*572c4311Sfengbojiang  - Add C++ new/delete operator bindings.  (@djwatson)
188*572c4311Sfengbojiang  - Support manually created arena destruction, such that all data and metadata
189*572c4311Sfengbojiang    are discarded.  Add MALLCTL_ARENAS_DESTROYED for accessing merged stats
190*572c4311Sfengbojiang    associated with destroyed arenas.  (@jasone)
191*572c4311Sfengbojiang  - Add MALLCTL_ARENAS_ALL as a fixed index for use in accessing
192*572c4311Sfengbojiang    merged/destroyed arena statistics via mallctl.  (@jasone)
193*572c4311Sfengbojiang  - Add opt.abort_conf to optionally abort if invalid configuration options are
194*572c4311Sfengbojiang    detected during initialization.  (@interwq)
195*572c4311Sfengbojiang  - Add opt.stats_print_opts, so that e.g. JSON output can be selected for the
196*572c4311Sfengbojiang    stats dumped during exit if opt.stats_print is true.  (@jasone)
197*572c4311Sfengbojiang  - Add --with-version=VERSION for use when embedding jemalloc into another
198*572c4311Sfengbojiang    project's git repository.  (@jasone)
199*572c4311Sfengbojiang  - Add --disable-thp to support cross compiling.  (@jasone)
200*572c4311Sfengbojiang  - Add --with-lg-hugepage to support cross compiling.  (@jasone)
201*572c4311Sfengbojiang  - Add mallctl interfaces (various authors):
202*572c4311Sfengbojiang    + background_thread
203*572c4311Sfengbojiang    + opt.abort_conf
204*572c4311Sfengbojiang    + opt.retain
205*572c4311Sfengbojiang    + opt.percpu_arena
206*572c4311Sfengbojiang    + opt.background_thread
207*572c4311Sfengbojiang    + opt.{dirty,muzzy}_decay_ms
208*572c4311Sfengbojiang    + opt.stats_print_opts
209*572c4311Sfengbojiang    + arena.<i>.initialized
210*572c4311Sfengbojiang    + arena.<i>.destroy
211*572c4311Sfengbojiang    + arena.<i>.{dirty,muzzy}_decay_ms
212*572c4311Sfengbojiang    + arena.<i>.extent_hooks
213*572c4311Sfengbojiang    + arenas.{dirty,muzzy}_decay_ms
214*572c4311Sfengbojiang    + arenas.bin.<i>.slab_size
215*572c4311Sfengbojiang    + arenas.nlextents
216*572c4311Sfengbojiang    + arenas.lextent.<i>.size
217*572c4311Sfengbojiang    + arenas.create
218*572c4311Sfengbojiang    + stats.background_thread.{num_threads,num_runs,run_interval}
219*572c4311Sfengbojiang    + stats.mutexes.{ctl,background_thread,prof,reset}.
220*572c4311Sfengbojiang      {num_ops,num_spin_acq,num_wait,max_wait_time,total_wait_time,max_num_thds,
221*572c4311Sfengbojiang      num_owner_switch}
222*572c4311Sfengbojiang    + stats.arenas.<i>.{dirty,muzzy}_decay_ms
223*572c4311Sfengbojiang    + stats.arenas.<i>.uptime
224*572c4311Sfengbojiang    + stats.arenas.<i>.{pmuzzy,base,internal,resident}
225*572c4311Sfengbojiang    + stats.arenas.<i>.{dirty,muzzy}_{npurge,nmadvise,purged}
226*572c4311Sfengbojiang    + stats.arenas.<i>.bins.<j>.{nslabs,reslabs,curslabs}
227*572c4311Sfengbojiang    + stats.arenas.<i>.bins.<j>.mutex.
228*572c4311Sfengbojiang      {num_ops,num_spin_acq,num_wait,max_wait_time,total_wait_time,max_num_thds,
229*572c4311Sfengbojiang      num_owner_switch}
230*572c4311Sfengbojiang    + stats.arenas.<i>.lextents.<j>.{nmalloc,ndalloc,nrequests,curlextents}
231*572c4311Sfengbojiang    + stats.arenas.i.mutexes.{large,extent_avail,extents_dirty,extents_muzzy,
232*572c4311Sfengbojiang      extents_retained,decay_dirty,decay_muzzy,base,tcache_list}.
233*572c4311Sfengbojiang      {num_ops,num_spin_acq,num_wait,max_wait_time,total_wait_time,max_num_thds,
234*572c4311Sfengbojiang      num_owner_switch}
235*572c4311Sfengbojiang
236*572c4311Sfengbojiang  Portability improvements:
237*572c4311Sfengbojiang  - Improve reentrant allocation support, such that deadlock is less likely if
238*572c4311Sfengbojiang    e.g. a system library call in turn allocates memory.  (@davidtgoldblatt,
239*572c4311Sfengbojiang    @interwq)
240*572c4311Sfengbojiang  - Support static linking of jemalloc with glibc.  (@djwatson)
241*572c4311Sfengbojiang
242*572c4311Sfengbojiang  Optimizations and refactors:
243*572c4311Sfengbojiang  - Organize virtual memory as "extents" of virtual memory pages, rather than as
244*572c4311Sfengbojiang    naturally aligned "chunks", and store all metadata in arbitrarily distant
245*572c4311Sfengbojiang    locations.  This reduces virtual memory external fragmentation, and will
246*572c4311Sfengbojiang    interact better with huge pages (not yet explicitly supported).  (@jasone)
247*572c4311Sfengbojiang  - Fold large and huge size classes together; only small and large size classes
248*572c4311Sfengbojiang    remain.  (@jasone)
249*572c4311Sfengbojiang  - Unify the allocation paths, and merge most fast-path branching decisions.
250*572c4311Sfengbojiang    (@davidtgoldblatt, @interwq)
251*572c4311Sfengbojiang  - Embed per thread automatic tcache into thread-specific data, which reduces
252*572c4311Sfengbojiang    conditional branches and dereferences.  Also reorganize tcache to increase
253*572c4311Sfengbojiang    fast-path data locality.  (@interwq)
254*572c4311Sfengbojiang  - Rewrite atomics to closely model the C11 API, convert various
255*572c4311Sfengbojiang    synchronization from mutex-based to atomic, and use the explicit memory
256*572c4311Sfengbojiang    ordering control to resolve various hypothetical races without increasing
257*572c4311Sfengbojiang    synchronization overhead.  (@davidtgoldblatt)
258*572c4311Sfengbojiang  - Extensively optimize rtree via various methods:
259*572c4311Sfengbojiang    + Add multiple layers of rtree lookup caching, since rtree lookups are now
260*572c4311Sfengbojiang      part of fast-path deallocation.  (@interwq)
261*572c4311Sfengbojiang    + Determine rtree layout at compile time.  (@jasone)
262*572c4311Sfengbojiang    + Make the tree shallower for common configurations.  (@jasone)
263*572c4311Sfengbojiang    + Embed the root node in the top-level rtree data structure, thus avoiding
264*572c4311Sfengbojiang      one level of indirection.  (@jasone)
265*572c4311Sfengbojiang    + Further specialize leaf elements as compared to internal node elements,
266*572c4311Sfengbojiang      and directly embed extent metadata needed for fast-path deallocation.
267*572c4311Sfengbojiang      (@jasone)
268*572c4311Sfengbojiang    + Ignore leading always-zero address bits (architecture-specific).
269*572c4311Sfengbojiang      (@jasone)
270*572c4311Sfengbojiang  - Reorganize headers (ongoing work) to make them hermetic, and disentangle
271*572c4311Sfengbojiang    various module dependencies.  (@davidtgoldblatt)
272*572c4311Sfengbojiang  - Convert various internal data structures such as size class metadata from
273*572c4311Sfengbojiang    boot-time-initialized to compile-time-initialized.  Propagate resulting data
274*572c4311Sfengbojiang    structure simplifications, such as making arena metadata fixed-size.
275*572c4311Sfengbojiang    (@jasone)
276*572c4311Sfengbojiang  - Simplify size class lookups when constrained to size classes that are
277*572c4311Sfengbojiang    multiples of the page size.  This speeds lookups, but the primary benefit is
278*572c4311Sfengbojiang    complexity reduction in code that was the source of numerous regressions.
279*572c4311Sfengbojiang    (@jasone)
280*572c4311Sfengbojiang  - Lock individual extents when possible for localized extent operations,
281*572c4311Sfengbojiang    rather than relying on a top-level arena lock.  (@davidtgoldblatt, @jasone)
282*572c4311Sfengbojiang  - Use first fit layout policy instead of best fit, in order to improve
283*572c4311Sfengbojiang    packing.  (@jasone)
284*572c4311Sfengbojiang  - If munmap(2) is not in use, use an exponential series to grow each arena's
285*572c4311Sfengbojiang    virtual memory, so that the number of disjoint virtual memory mappings
286*572c4311Sfengbojiang    remains low.  (@jasone)
287*572c4311Sfengbojiang  - Implement per arena base allocators, so that arenas never share any virtual
288*572c4311Sfengbojiang    memory pages.  (@jasone)
289*572c4311Sfengbojiang  - Automatically generate private symbol name mangling macros.  (@jasone)
290*572c4311Sfengbojiang
291*572c4311Sfengbojiang  Incompatible changes:
292*572c4311Sfengbojiang  - Replace chunk hooks with an expanded/normalized set of extent hooks.
293*572c4311Sfengbojiang    (@jasone)
294*572c4311Sfengbojiang  - Remove ratio-based purging.  (@jasone)
295*572c4311Sfengbojiang  - Remove --disable-tcache.  (@jasone)
296*572c4311Sfengbojiang  - Remove --disable-tls.  (@jasone)
297*572c4311Sfengbojiang  - Remove --enable-ivsalloc.  (@jasone)
298*572c4311Sfengbojiang  - Remove --with-lg-size-class-group.  (@jasone)
299*572c4311Sfengbojiang  - Remove --with-lg-tiny-min.  (@jasone)
300*572c4311Sfengbojiang  - Remove --disable-cc-silence.  (@jasone)
301*572c4311Sfengbojiang  - Remove --enable-code-coverage.  (@jasone)
302*572c4311Sfengbojiang  - Remove --disable-munmap (replaced by opt.retain).  (@jasone)
303*572c4311Sfengbojiang  - Remove Valgrind support.  (@jasone)
304*572c4311Sfengbojiang  - Remove quarantine support.  (@jasone)
305*572c4311Sfengbojiang  - Remove redzone support.  (@jasone)
306*572c4311Sfengbojiang  - Remove mallctl interfaces (various authors):
307*572c4311Sfengbojiang    + config.munmap
308*572c4311Sfengbojiang    + config.tcache
309*572c4311Sfengbojiang    + config.tls
310*572c4311Sfengbojiang    + config.valgrind
311*572c4311Sfengbojiang    + opt.lg_chunk
312*572c4311Sfengbojiang    + opt.purge
313*572c4311Sfengbojiang    + opt.lg_dirty_mult
314*572c4311Sfengbojiang    + opt.decay_time
315*572c4311Sfengbojiang    + opt.quarantine
316*572c4311Sfengbojiang    + opt.redzone
317*572c4311Sfengbojiang    + opt.thp
318*572c4311Sfengbojiang    + arena.<i>.lg_dirty_mult
319*572c4311Sfengbojiang    + arena.<i>.decay_time
320*572c4311Sfengbojiang    + arena.<i>.chunk_hooks
321*572c4311Sfengbojiang    + arenas.initialized
322*572c4311Sfengbojiang    + arenas.lg_dirty_mult
323*572c4311Sfengbojiang    + arenas.decay_time
324*572c4311Sfengbojiang    + arenas.bin.<i>.run_size
325*572c4311Sfengbojiang    + arenas.nlruns
326*572c4311Sfengbojiang    + arenas.lrun.<i>.size
327*572c4311Sfengbojiang    + arenas.nhchunks
328*572c4311Sfengbojiang    + arenas.hchunk.<i>.size
329*572c4311Sfengbojiang    + arenas.extend
330*572c4311Sfengbojiang    + stats.cactive
331*572c4311Sfengbojiang    + stats.arenas.<i>.lg_dirty_mult
332*572c4311Sfengbojiang    + stats.arenas.<i>.decay_time
333*572c4311Sfengbojiang    + stats.arenas.<i>.metadata.{mapped,allocated}
334*572c4311Sfengbojiang    + stats.arenas.<i>.{npurge,nmadvise,purged}
335*572c4311Sfengbojiang    + stats.arenas.<i>.huge.{allocated,nmalloc,ndalloc,nrequests}
336*572c4311Sfengbojiang    + stats.arenas.<i>.bins.<j>.{nruns,reruns,curruns}
337*572c4311Sfengbojiang    + stats.arenas.<i>.lruns.<j>.{nmalloc,ndalloc,nrequests,curruns}
338*572c4311Sfengbojiang    + stats.arenas.<i>.hchunks.<j>.{nmalloc,ndalloc,nrequests,curhchunks}
339*572c4311Sfengbojiang
340*572c4311Sfengbojiang  Bug fixes:
341*572c4311Sfengbojiang  - Improve interval-based profile dump triggering to dump only one profile when
342*572c4311Sfengbojiang    a single allocation's size exceeds the interval.  (@jasone)
343*572c4311Sfengbojiang  - Use prefixed function names (as controlled by --with-jemalloc-prefix) when
344*572c4311Sfengbojiang    pruning backtrace frames in jeprof.  (@jasone)
345*572c4311Sfengbojiang
346*572c4311Sfengbojiang* 4.5.0 (February 28, 2017)
347*572c4311Sfengbojiang
348*572c4311Sfengbojiang  This is the first release to benefit from much broader continuous integration
349*572c4311Sfengbojiang  testing, thanks to @davidtgoldblatt.  Had we had this testing infrastructure
350*572c4311Sfengbojiang  in place for prior releases, it would have caught all of the most serious
351*572c4311Sfengbojiang  regressions fixed by this release.
352*572c4311Sfengbojiang
353*572c4311Sfengbojiang  New features:
354*572c4311Sfengbojiang  - Add --disable-thp and the opt.thp mallctl to provide opt-out mechanisms for
355*572c4311Sfengbojiang    transparent huge page integration.  (@jasone)
356*572c4311Sfengbojiang  - Update zone allocator integration to work with macOS 10.12.  (@glandium)
357*572c4311Sfengbojiang  - Restructure *CFLAGS configuration, so that CFLAGS behaves typically, and
358*572c4311Sfengbojiang    EXTRA_CFLAGS provides a way to specify e.g. -Werror during building, but not
359*572c4311Sfengbojiang    during configuration.  (@jasone, @ronawho)
360*572c4311Sfengbojiang
361*572c4311Sfengbojiang  Bug fixes:
362*572c4311Sfengbojiang  - Fix DSS (sbrk(2)-based) allocation.  This regression was first released in
363*572c4311Sfengbojiang    4.3.0.  (@jasone)
364*572c4311Sfengbojiang  - Handle race in per size class utilization computation.  This functionality
365*572c4311Sfengbojiang    was first released in 4.0.0.  (@interwq)
366*572c4311Sfengbojiang  - Fix lock order reversal during gdump.  (@jasone)
367*572c4311Sfengbojiang  - Fix/refactor tcache synchronization.  This regression was first released in
368*572c4311Sfengbojiang    4.0.0.  (@jasone)
369*572c4311Sfengbojiang  - Fix various JSON-formatted malloc_stats_print() bugs.  This functionality
370*572c4311Sfengbojiang    was first released in 4.3.0.  (@jasone)
371*572c4311Sfengbojiang  - Fix huge-aligned allocation.  This regression was first released in 4.4.0.
372*572c4311Sfengbojiang    (@jasone)
373*572c4311Sfengbojiang  - When transparent huge page integration is enabled, detect what state pages
374*572c4311Sfengbojiang    start in according to the kernel's current operating mode, and only convert
375*572c4311Sfengbojiang    arena chunks to non-huge during purging if that is not their initial state.
376*572c4311Sfengbojiang    This functionality was first released in 4.4.0.  (@jasone)
377*572c4311Sfengbojiang  - Fix lg_chunk clamping for the --enable-cache-oblivious --disable-fill case.
378*572c4311Sfengbojiang    This regression was first released in 4.0.0.  (@jasone, @428desmo)
379*572c4311Sfengbojiang  - Properly detect sparc64 when building for Linux.  (@glaubitz)
380*572c4311Sfengbojiang
381*572c4311Sfengbojiang* 4.4.0 (December 3, 2016)
382*572c4311Sfengbojiang
383*572c4311Sfengbojiang  New features:
384*572c4311Sfengbojiang  - Add configure support for *-*-linux-android.  (@cferris1000, @jasone)
385*572c4311Sfengbojiang  - Add the --disable-syscall configure option, for use on systems that place
386*572c4311Sfengbojiang    security-motivated limitations on syscall(2).  (@jasone)
387*572c4311Sfengbojiang  - Add support for Debian GNU/kFreeBSD.  (@thesam)
388*572c4311Sfengbojiang
389*572c4311Sfengbojiang  Optimizations:
390*572c4311Sfengbojiang  - Add extent serial numbers and use them where appropriate as a sort key that
391*572c4311Sfengbojiang    is higher priority than address, so that the allocation policy prefers older
392*572c4311Sfengbojiang    extents.  This tends to improve locality (decrease fragmentation) when
393*572c4311Sfengbojiang    memory grows downward.  (@jasone)
394*572c4311Sfengbojiang  - Refactor madvise(2) configuration so that MADV_FREE is detected and utilized
395*572c4311Sfengbojiang    on Linux 4.5 and newer.  (@jasone)
396*572c4311Sfengbojiang  - Mark partially purged arena chunks as non-huge-page.  This improves
397*572c4311Sfengbojiang    interaction with Linux's transparent huge page functionality.  (@jasone)
398*572c4311Sfengbojiang
399*572c4311Sfengbojiang  Bug fixes:
400*572c4311Sfengbojiang  - Fix size class computations for edge conditions involving extremely large
401*572c4311Sfengbojiang    allocations.  This regression was first released in 4.0.0.  (@jasone,
402*572c4311Sfengbojiang    @ingvarha)
403*572c4311Sfengbojiang  - Remove overly restrictive assertions related to the cactive statistic.  This
404*572c4311Sfengbojiang    regression was first released in 4.1.0.  (@jasone)
405*572c4311Sfengbojiang  - Implement a more reliable detection scheme for os_unfair_lock on macOS.
406*572c4311Sfengbojiang    (@jszakmeister)
407*572c4311Sfengbojiang
408*572c4311Sfengbojiang* 4.3.1 (November 7, 2016)
409*572c4311Sfengbojiang
410*572c4311Sfengbojiang  Bug fixes:
411*572c4311Sfengbojiang  - Fix a severe virtual memory leak.  This regression was first released in
412*572c4311Sfengbojiang    4.3.0.  (@interwq, @jasone)
413*572c4311Sfengbojiang  - Refactor atomic and prng APIs to restore support for 32-bit platforms that
414*572c4311Sfengbojiang    use pre-C11 toolchains, e.g. FreeBSD's mips.  (@jasone)
415*572c4311Sfengbojiang
416*572c4311Sfengbojiang* 4.3.0 (November 4, 2016)
417*572c4311Sfengbojiang
418*572c4311Sfengbojiang  This is the first release that passes the test suite for multiple Windows
419*572c4311Sfengbojiang  configurations, thanks in large part to @glandium setting up continuous
420*572c4311Sfengbojiang  integration via AppVeyor (and Travis CI for Linux and OS X).
421*572c4311Sfengbojiang
422*572c4311Sfengbojiang  New features:
423*572c4311Sfengbojiang  - Add "J" (JSON) support to malloc_stats_print().  (@jasone)
424*572c4311Sfengbojiang  - Add Cray compiler support.  (@ronawho)
425*572c4311Sfengbojiang
426*572c4311Sfengbojiang  Optimizations:
427*572c4311Sfengbojiang  - Add/use adaptive spinning for bootstrapping and radix tree node
428*572c4311Sfengbojiang    initialization.  (@jasone)
429*572c4311Sfengbojiang
430*572c4311Sfengbojiang  Bug fixes:
431*572c4311Sfengbojiang  - Fix large allocation to search starting in the optimal size class heap,
432*572c4311Sfengbojiang    which can substantially reduce virtual memory churn and fragmentation.  This
433*572c4311Sfengbojiang    regression was first released in 4.0.0.  (@mjp41, @jasone)
434*572c4311Sfengbojiang  - Fix stats.arenas.<i>.nthreads accounting.  (@interwq)
435*572c4311Sfengbojiang  - Fix and simplify decay-based purging.  (@jasone)
436*572c4311Sfengbojiang  - Make DSS (sbrk(2)-related) operations lockless, which resolves potential
437*572c4311Sfengbojiang    deadlocks during thread exit.  (@jasone)
438*572c4311Sfengbojiang  - Fix over-sized allocation of radix tree leaf nodes.  (@mjp41, @ogaun,
439*572c4311Sfengbojiang    @jasone)
440*572c4311Sfengbojiang  - Fix over-sized allocation of arena_t (plus associated stats) data
441*572c4311Sfengbojiang    structures.  (@jasone, @interwq)
442*572c4311Sfengbojiang  - Fix EXTRA_CFLAGS to not affect configuration.  (@jasone)
443*572c4311Sfengbojiang  - Fix a Valgrind integration bug.  (@ronawho)
444*572c4311Sfengbojiang  - Disallow 0x5a junk filling when running in Valgrind.  (@jasone)
445*572c4311Sfengbojiang  - Fix a file descriptor leak on Linux.  This regression was first released in
446*572c4311Sfengbojiang    4.2.0.  (@vsarunas, @jasone)
447*572c4311Sfengbojiang  - Fix static linking of jemalloc with glibc.  (@djwatson)
448*572c4311Sfengbojiang  - Use syscall(2) rather than {open,read,close}(2) during boot on Linux.  This
449*572c4311Sfengbojiang    works around other libraries' system call wrappers performing reentrant
450*572c4311Sfengbojiang    allocation.  (@kspinka, @Whissi, @jasone)
451*572c4311Sfengbojiang  - Fix OS X default zone replacement to work with OS X 10.12.  (@glandium,
452*572c4311Sfengbojiang    @jasone)
453*572c4311Sfengbojiang  - Fix cached memory management to avoid needless commit/decommit operations
454*572c4311Sfengbojiang    during purging, which resolves permanent virtual memory map fragmentation
455*572c4311Sfengbojiang    issues on Windows.  (@mjp41, @jasone)
456*572c4311Sfengbojiang  - Fix TSD fetches to avoid (recursive) allocation.  This is relevant to
457*572c4311Sfengbojiang    non-TLS and Windows configurations.  (@jasone)
458*572c4311Sfengbojiang  - Fix malloc_conf overriding to work on Windows.  (@jasone)
459*572c4311Sfengbojiang  - Forcibly disable lazy-lock on Windows (was forcibly *enabled*).  (@jasone)
460*572c4311Sfengbojiang
461*572c4311Sfengbojiang* 4.2.1 (June 8, 2016)
462*572c4311Sfengbojiang
463*572c4311Sfengbojiang  Bug fixes:
464*572c4311Sfengbojiang  - Fix bootstrapping issues for configurations that require allocation during
465*572c4311Sfengbojiang    tsd initialization (e.g. --disable-tls).  (@cferris1000, @jasone)
466*572c4311Sfengbojiang  - Fix gettimeofday() version of nstime_update().  (@ronawho)
467*572c4311Sfengbojiang  - Fix Valgrind regressions in calloc() and chunk_alloc_wrapper().  (@ronawho)
468*572c4311Sfengbojiang  - Fix potential VM map fragmentation regression.  (@jasone)
469*572c4311Sfengbojiang  - Fix opt_zero-triggered in-place huge reallocation zeroing.  (@jasone)
470*572c4311Sfengbojiang  - Fix heap profiling context leaks in reallocation edge cases.  (@jasone)
471*572c4311Sfengbojiang
472*572c4311Sfengbojiang* 4.2.0 (May 12, 2016)
473*572c4311Sfengbojiang
474*572c4311Sfengbojiang  New features:
475*572c4311Sfengbojiang  - Add the arena.<i>.reset mallctl, which makes it possible to discard all of
476*572c4311Sfengbojiang    an arena's allocations in a single operation.  (@jasone)
477*572c4311Sfengbojiang  - Add the stats.retained and stats.arenas.<i>.retained statistics.  (@jasone)
478*572c4311Sfengbojiang  - Add the --with-version configure option.  (@jasone)
479*572c4311Sfengbojiang  - Support --with-lg-page values larger than actual page size.  (@jasone)
480*572c4311Sfengbojiang
481*572c4311Sfengbojiang  Optimizations:
482*572c4311Sfengbojiang  - Use pairing heaps rather than red-black trees for various hot data
483*572c4311Sfengbojiang    structures.  (@djwatson, @jasone)
484*572c4311Sfengbojiang  - Streamline fast paths of rtree operations.  (@jasone)
485*572c4311Sfengbojiang  - Optimize the fast paths of calloc() and [m,d,sd]allocx().  (@jasone)
486*572c4311Sfengbojiang  - Decommit unused virtual memory if the OS does not overcommit.  (@jasone)
487*572c4311Sfengbojiang  - Specify MAP_NORESERVE on Linux if [heuristic] overcommit is active, in order
488*572c4311Sfengbojiang    to avoid unfortunate interactions during fork(2).  (@jasone)
489*572c4311Sfengbojiang
490*572c4311Sfengbojiang  Bug fixes:
491*572c4311Sfengbojiang  - Fix chunk accounting related to triggering gdump profiles.  (@jasone)
492*572c4311Sfengbojiang  - Link against librt for clock_gettime(2) if glibc < 2.17.  (@jasone)
493*572c4311Sfengbojiang  - Scale leak report summary according to sampling probability.  (@jasone)
494*572c4311Sfengbojiang
495*572c4311Sfengbojiang* 4.1.1 (May 3, 2016)
496*572c4311Sfengbojiang
497*572c4311Sfengbojiang  This bugfix release resolves a variety of mostly minor issues, though the
498*572c4311Sfengbojiang  bitmap fix is critical for 64-bit Windows.
499*572c4311Sfengbojiang
500*572c4311Sfengbojiang  Bug fixes:
501*572c4311Sfengbojiang  - Fix the linear scan version of bitmap_sfu() to shift by the proper amount
502*572c4311Sfengbojiang    even when sizeof(long) is not the same as sizeof(void *), as on 64-bit
503*572c4311Sfengbojiang    Windows.  (@jasone)
504*572c4311Sfengbojiang  - Fix hashing functions to avoid unaligned memory accesses (and resulting
505*572c4311Sfengbojiang    crashes).  This is relevant at least to some ARM-based platforms.
506*572c4311Sfengbojiang    (@rkmisra)
507*572c4311Sfengbojiang  - Fix fork()-related lock rank ordering reversals.  These reversals were
508*572c4311Sfengbojiang    unlikely to cause deadlocks in practice except when heap profiling was
509*572c4311Sfengbojiang    enabled and active.  (@jasone)
510*572c4311Sfengbojiang  - Fix various chunk leaks in OOM code paths.  (@jasone)
511*572c4311Sfengbojiang  - Fix malloc_stats_print() to print opt.narenas correctly.  (@jasone)
512*572c4311Sfengbojiang  - Fix MSVC-specific build/test issues.  (@rustyx, @yuslepukhin)
513*572c4311Sfengbojiang  - Fix a variety of test failures that were due to test fragility rather than
514*572c4311Sfengbojiang    core bugs.  (@jasone)
515*572c4311Sfengbojiang
516*572c4311Sfengbojiang* 4.1.0 (February 28, 2016)
517*572c4311Sfengbojiang
518*572c4311Sfengbojiang  This release is primarily about optimizations, but it also incorporates a lot
519*572c4311Sfengbojiang  of portability-motivated refactoring and enhancements.  Many people worked on
520*572c4311Sfengbojiang  this release, to an extent that even with the omission here of minor changes
521*572c4311Sfengbojiang  (see git revision history), and of the people who reported and diagnosed
522*572c4311Sfengbojiang  issues, so much of the work was contributed that starting with this release,
523*572c4311Sfengbojiang  changes are annotated with author credits to help reflect the collaborative
524*572c4311Sfengbojiang  effort involved.
525*572c4311Sfengbojiang
526*572c4311Sfengbojiang  New features:
527*572c4311Sfengbojiang  - Implement decay-based unused dirty page purging, a major optimization with
528*572c4311Sfengbojiang    mallctl API impact.  This is an alternative to the existing ratio-based
529*572c4311Sfengbojiang    unused dirty page purging, and is intended to eventually become the sole
530*572c4311Sfengbojiang    purging mechanism.  New mallctls:
531*572c4311Sfengbojiang    + opt.purge
532*572c4311Sfengbojiang    + opt.decay_time
533*572c4311Sfengbojiang    + arena.<i>.decay
534*572c4311Sfengbojiang    + arena.<i>.decay_time
535*572c4311Sfengbojiang    + arenas.decay_time
536*572c4311Sfengbojiang    + stats.arenas.<i>.decay_time
537*572c4311Sfengbojiang    (@jasone, @cevans87)
538*572c4311Sfengbojiang  - Add --with-malloc-conf, which makes it possible to embed a default
539*572c4311Sfengbojiang    options string during configuration.  This was motivated by the desire to
540*572c4311Sfengbojiang    specify --with-malloc-conf=purge:decay , since the default must remain
541*572c4311Sfengbojiang    purge:ratio until the 5.0.0 release.  (@jasone)
542*572c4311Sfengbojiang  - Add MS Visual Studio 2015 support.  (@rustyx, @yuslepukhin)
543*572c4311Sfengbojiang  - Make *allocx() size class overflow behavior defined.  The maximum
544*572c4311Sfengbojiang    size class is now less than PTRDIFF_MAX to protect applications against
545*572c4311Sfengbojiang    numerical overflow, and all allocation functions are guaranteed to indicate
546*572c4311Sfengbojiang    errors rather than potentially crashing if the request size exceeds the
547*572c4311Sfengbojiang    maximum size class.  (@jasone)
548*572c4311Sfengbojiang  - jeprof:
549*572c4311Sfengbojiang    + Add raw heap profile support.  (@jasone)
550*572c4311Sfengbojiang    + Add --retain and --exclude for backtrace symbol filtering.  (@jasone)
551*572c4311Sfengbojiang
552*572c4311Sfengbojiang  Optimizations:
553*572c4311Sfengbojiang  - Optimize the fast path to combine various bootstrapping and configuration
554*572c4311Sfengbojiang    checks and execute more streamlined code in the common case.  (@interwq)
555*572c4311Sfengbojiang  - Use linear scan for small bitmaps (used for small object tracking).  In
556*572c4311Sfengbojiang    addition to speeding up bitmap operations on 64-bit systems, this reduces
557*572c4311Sfengbojiang    allocator metadata overhead by approximately 0.2%.  (@djwatson)
558*572c4311Sfengbojiang  - Separate arena_avail trees, which substantially speeds up run tree
559*572c4311Sfengbojiang    operations.  (@djwatson)
560*572c4311Sfengbojiang  - Use memoization (boot-time-computed table) for run quantization.  Separate
561*572c4311Sfengbojiang    arena_avail trees reduced the importance of this optimization.  (@jasone)
562*572c4311Sfengbojiang  - Attempt mmap-based in-place huge reallocation.  This can dramatically speed
563*572c4311Sfengbojiang    up incremental huge reallocation.  (@jasone)
564*572c4311Sfengbojiang
565*572c4311Sfengbojiang  Incompatible changes:
566*572c4311Sfengbojiang  - Make opt.narenas unsigned rather than size_t.  (@jasone)
567*572c4311Sfengbojiang
568*572c4311Sfengbojiang  Bug fixes:
569*572c4311Sfengbojiang  - Fix stats.cactive accounting regression.  (@rustyx, @jasone)
570*572c4311Sfengbojiang  - Handle unaligned keys in hash().  This caused problems for some ARM systems.
571*572c4311Sfengbojiang    (@jasone, @cferris1000)
572*572c4311Sfengbojiang  - Refactor arenas array.  In addition to fixing a fork-related deadlock, this
573*572c4311Sfengbojiang    makes arena lookups faster and simpler.  (@jasone)
574*572c4311Sfengbojiang  - Move retained memory allocation out of the default chunk allocation
575*572c4311Sfengbojiang    function, to a location that gets executed even if the application installs
576*572c4311Sfengbojiang    a custom chunk allocation function.  This resolves a virtual memory leak.
577*572c4311Sfengbojiang    (@buchgr)
578*572c4311Sfengbojiang  - Fix a potential tsd cleanup leak.  (@cferris1000, @jasone)
579*572c4311Sfengbojiang  - Fix run quantization.  In practice this bug had no impact unless
580*572c4311Sfengbojiang    applications requested memory with alignment exceeding one page.
581*572c4311Sfengbojiang    (@jasone, @djwatson)
582*572c4311Sfengbojiang  - Fix LinuxThreads-specific bootstrapping deadlock.  (Cosmin Paraschiv)
583*572c4311Sfengbojiang  - jeprof:
584*572c4311Sfengbojiang    + Don't discard curl options if timeout is not defined.  (@djwatson)
585*572c4311Sfengbojiang    + Detect failed profile fetches.  (@djwatson)
586*572c4311Sfengbojiang  - Fix stats.arenas.<i>.{dss,lg_dirty_mult,decay_time,pactive,pdirty} for
587*572c4311Sfengbojiang    --disable-stats case.  (@jasone)
588*572c4311Sfengbojiang
589*572c4311Sfengbojiang* 4.0.4 (October 24, 2015)
590*572c4311Sfengbojiang
591*572c4311Sfengbojiang  This bugfix release fixes another xallocx() regression.  No other regressions
592*572c4311Sfengbojiang  have come to light in over a month, so this is likely a good starting point
593*572c4311Sfengbojiang  for people who prefer to wait for "dot one" releases with all the major issues
594*572c4311Sfengbojiang  shaken out.
595*572c4311Sfengbojiang
596*572c4311Sfengbojiang  Bug fixes:
597*572c4311Sfengbojiang  - Fix xallocx(..., MALLOCX_ZERO to zero the last full trailing page of large
598*572c4311Sfengbojiang    allocations that have been randomly assigned an offset of 0 when
599*572c4311Sfengbojiang    --enable-cache-oblivious configure option is enabled.
600*572c4311Sfengbojiang
601*572c4311Sfengbojiang* 4.0.3 (September 24, 2015)
602*572c4311Sfengbojiang
603*572c4311Sfengbojiang  This bugfix release continues the trend of xallocx() and heap profiling fixes.
604*572c4311Sfengbojiang
605*572c4311Sfengbojiang  Bug fixes:
606*572c4311Sfengbojiang  - Fix xallocx(..., MALLOCX_ZERO) to zero all trailing bytes of large
607*572c4311Sfengbojiang    allocations when --enable-cache-oblivious configure option is enabled.
608*572c4311Sfengbojiang  - Fix xallocx(..., MALLOCX_ZERO) to zero trailing bytes of huge allocations
609*572c4311Sfengbojiang    when resizing from/to a size class that is not a multiple of the chunk size.
610*572c4311Sfengbojiang  - Fix prof_tctx_dump_iter() to filter out nodes that were created after heap
611*572c4311Sfengbojiang    profile dumping started.
612*572c4311Sfengbojiang  - Work around a potentially bad thread-specific data initialization
613*572c4311Sfengbojiang    interaction with NPTL (glibc's pthreads implementation).
614*572c4311Sfengbojiang
615*572c4311Sfengbojiang* 4.0.2 (September 21, 2015)
616*572c4311Sfengbojiang
617*572c4311Sfengbojiang  This bugfix release addresses a few bugs specific to heap profiling.
618*572c4311Sfengbojiang
619*572c4311Sfengbojiang  Bug fixes:
620*572c4311Sfengbojiang  - Fix ixallocx_prof_sample() to never modify nor create sampled small
621*572c4311Sfengbojiang    allocations.  xallocx() is in general incapable of moving small allocations,
622*572c4311Sfengbojiang    so this fix removes buggy code without loss of generality.
623*572c4311Sfengbojiang  - Fix irallocx_prof_sample() to always allocate large regions, even when
624*572c4311Sfengbojiang    alignment is non-zero.
625*572c4311Sfengbojiang  - Fix prof_alloc_rollback() to read tdata from thread-specific data rather
626*572c4311Sfengbojiang    than dereferencing a potentially invalid tctx.
627*572c4311Sfengbojiang
628*572c4311Sfengbojiang* 4.0.1 (September 15, 2015)
629*572c4311Sfengbojiang
630*572c4311Sfengbojiang  This is a bugfix release that is somewhat high risk due to the amount of
631*572c4311Sfengbojiang  refactoring required to address deep xallocx() problems.  As a side effect of
632*572c4311Sfengbojiang  these fixes, xallocx() now tries harder to partially fulfill requests for
633*572c4311Sfengbojiang  optional extra space.  Note that a couple of minor heap profiling
634*572c4311Sfengbojiang  optimizations are included, but these are better thought of as performance
635*572c4311Sfengbojiang  fixes that were integral to discovering most of the other bugs.
636*572c4311Sfengbojiang
637*572c4311Sfengbojiang  Optimizations:
638*572c4311Sfengbojiang  - Avoid a chunk metadata read in arena_prof_tctx_set(), since it is in the
639*572c4311Sfengbojiang    fast path when heap profiling is enabled.  Additionally, split a special
640*572c4311Sfengbojiang    case out into arena_prof_tctx_reset(), which also avoids chunk metadata
641*572c4311Sfengbojiang    reads.
642*572c4311Sfengbojiang  - Optimize irallocx_prof() to optimistically update the sampler state.  The
643*572c4311Sfengbojiang    prior implementation appears to have been a holdover from when
644*572c4311Sfengbojiang    rallocx()/xallocx() functionality was combined as rallocm().
645*572c4311Sfengbojiang
646*572c4311Sfengbojiang  Bug fixes:
647*572c4311Sfengbojiang  - Fix TLS configuration such that it is enabled by default for platforms on
648*572c4311Sfengbojiang    which it works correctly.
649*572c4311Sfengbojiang  - Fix arenas_cache_cleanup() and arena_get_hard() to handle
650*572c4311Sfengbojiang    allocation/deallocation within the application's thread-specific data
651*572c4311Sfengbojiang    cleanup functions even after arenas_cache is torn down.
652*572c4311Sfengbojiang  - Fix xallocx() bugs related to size+extra exceeding HUGE_MAXCLASS.
653*572c4311Sfengbojiang  - Fix chunk purge hook calls for in-place huge shrinking reallocation to
654*572c4311Sfengbojiang    specify the old chunk size rather than the new chunk size.  This bug caused
655*572c4311Sfengbojiang    no correctness issues for the default chunk purge function, but was
656*572c4311Sfengbojiang    visible to custom functions set via the "arena.<i>.chunk_hooks" mallctl.
657*572c4311Sfengbojiang  - Fix heap profiling bugs:
658*572c4311Sfengbojiang    + Fix heap profiling to distinguish among otherwise identical sample sites
659*572c4311Sfengbojiang      with interposed resets (triggered via the "prof.reset" mallctl).  This bug
660*572c4311Sfengbojiang      could cause data structure corruption that would most likely result in a
661*572c4311Sfengbojiang      segfault.
662*572c4311Sfengbojiang    + Fix irealloc_prof() to prof_alloc_rollback() on OOM.
663*572c4311Sfengbojiang    + Make one call to prof_active_get_unlocked() per allocation event, and use
664*572c4311Sfengbojiang      the result throughout the relevant functions that handle an allocation
665*572c4311Sfengbojiang      event.  Also add a missing check in prof_realloc().  These fixes protect
666*572c4311Sfengbojiang      allocation events against concurrent prof_active changes.
667*572c4311Sfengbojiang    + Fix ixallocx_prof() to pass usize_max and zero to ixallocx_prof_sample()
668*572c4311Sfengbojiang      in the correct order.
669*572c4311Sfengbojiang    + Fix prof_realloc() to call prof_free_sampled_object() after calling
670*572c4311Sfengbojiang      prof_malloc_sample_object().  Prior to this fix, if tctx and old_tctx were
671*572c4311Sfengbojiang      the same, the tctx could have been prematurely destroyed.
672*572c4311Sfengbojiang  - Fix portability bugs:
673*572c4311Sfengbojiang    + Don't bitshift by negative amounts when encoding/decoding run sizes in
674*572c4311Sfengbojiang      chunk header maps.  This affected systems with page sizes greater than 8
675*572c4311Sfengbojiang      KiB.
676*572c4311Sfengbojiang    + Rename index_t to szind_t to avoid an existing type on Solaris.
677*572c4311Sfengbojiang    + Add JEMALLOC_CXX_THROW to the memalign() function prototype, in order to
678*572c4311Sfengbojiang      match glibc and avoid compilation errors when including both
679*572c4311Sfengbojiang      jemalloc/jemalloc.h and malloc.h in C++ code.
680*572c4311Sfengbojiang    + Don't assume that /bin/sh is appropriate when running size_classes.sh
681*572c4311Sfengbojiang      during configuration.
682*572c4311Sfengbojiang    + Consider __sparcv9 a synonym for __sparc64__ when defining LG_QUANTUM.
683*572c4311Sfengbojiang    + Link tests to librt if it contains clock_gettime(2).
684*572c4311Sfengbojiang
685*572c4311Sfengbojiang* 4.0.0 (August 17, 2015)
686*572c4311Sfengbojiang
687*572c4311Sfengbojiang  This version contains many speed and space optimizations, both minor and
688*572c4311Sfengbojiang  major.  The major themes are generalization, unification, and simplification.
689*572c4311Sfengbojiang  Although many of these optimizations cause no visible behavior change, their
690*572c4311Sfengbojiang  cumulative effect is substantial.
691*572c4311Sfengbojiang
692*572c4311Sfengbojiang  New features:
693*572c4311Sfengbojiang  - Normalize size class spacing to be consistent across the complete size
694*572c4311Sfengbojiang    range.  By default there are four size classes per size doubling, but this
695*572c4311Sfengbojiang    is now configurable via the --with-lg-size-class-group option.  Also add the
696*572c4311Sfengbojiang    --with-lg-page, --with-lg-page-sizes, --with-lg-quantum, and
697*572c4311Sfengbojiang    --with-lg-tiny-min options, which can be used to tweak page and size class
698*572c4311Sfengbojiang    settings.  Impacts:
699*572c4311Sfengbojiang    + Worst case performance for incrementally growing/shrinking reallocation
700*572c4311Sfengbojiang      is improved because there are far fewer size classes, and therefore
701*572c4311Sfengbojiang      copying happens less often.
702*572c4311Sfengbojiang    + Internal fragmentation is limited to 20% for all but the smallest size
703*572c4311Sfengbojiang      classes (those less than four times the quantum).  (1B + 4 KiB)
704*572c4311Sfengbojiang      and (1B + 4 MiB) previously suffered nearly 50% internal fragmentation.
705*572c4311Sfengbojiang    + Chunk fragmentation tends to be lower because there are fewer distinct run
706*572c4311Sfengbojiang      sizes to pack.
707*572c4311Sfengbojiang  - Add support for explicit tcaches.  The "tcache.create", "tcache.flush", and
708*572c4311Sfengbojiang    "tcache.destroy" mallctls control tcache lifetime and flushing, and the
709*572c4311Sfengbojiang    MALLOCX_TCACHE(tc) and MALLOCX_TCACHE_NONE flags to the *allocx() API
710*572c4311Sfengbojiang    control which tcache is used for each operation.
711*572c4311Sfengbojiang  - Implement per thread heap profiling, as well as the ability to
712*572c4311Sfengbojiang    enable/disable heap profiling on a per thread basis.  Add the "prof.reset",
713*572c4311Sfengbojiang    "prof.lg_sample", "thread.prof.name", "thread.prof.active",
714*572c4311Sfengbojiang    "opt.prof_thread_active_init", "prof.thread_active_init", and
715*572c4311Sfengbojiang    "thread.prof.active" mallctls.
716*572c4311Sfengbojiang  - Add support for per arena application-specified chunk allocators, configured
717*572c4311Sfengbojiang    via the "arena.<i>.chunk_hooks" mallctl.
718*572c4311Sfengbojiang  - Refactor huge allocation to be managed by arenas, so that arenas now
719*572c4311Sfengbojiang    function as general purpose independent allocators.  This is important in
720*572c4311Sfengbojiang    the context of user-specified chunk allocators, aside from the scalability
721*572c4311Sfengbojiang    benefits.  Related new statistics:
722*572c4311Sfengbojiang    + The "stats.arenas.<i>.huge.allocated", "stats.arenas.<i>.huge.nmalloc",
723*572c4311Sfengbojiang      "stats.arenas.<i>.huge.ndalloc", and "stats.arenas.<i>.huge.nrequests"
724*572c4311Sfengbojiang      mallctls provide high level per arena huge allocation statistics.
725*572c4311Sfengbojiang    + The "arenas.nhchunks", "arenas.hchunk.<i>.size",
726*572c4311Sfengbojiang      "stats.arenas.<i>.hchunks.<j>.nmalloc",
727*572c4311Sfengbojiang      "stats.arenas.<i>.hchunks.<j>.ndalloc",
728*572c4311Sfengbojiang      "stats.arenas.<i>.hchunks.<j>.nrequests", and
729*572c4311Sfengbojiang      "stats.arenas.<i>.hchunks.<j>.curhchunks" mallctls provide per size class
730*572c4311Sfengbojiang      statistics.
731*572c4311Sfengbojiang  - Add the 'util' column to malloc_stats_print() output, which reports the
732*572c4311Sfengbojiang    proportion of available regions that are currently in use for each small
733*572c4311Sfengbojiang    size class.
734*572c4311Sfengbojiang  - Add "alloc" and "free" modes for for junk filling (see the "opt.junk"
735*572c4311Sfengbojiang    mallctl), so that it is possible to separately enable junk filling for
736*572c4311Sfengbojiang    allocation versus deallocation.
737*572c4311Sfengbojiang  - Add the jemalloc-config script, which provides information about how
738*572c4311Sfengbojiang    jemalloc was configured, and how to integrate it into application builds.
739*572c4311Sfengbojiang  - Add metadata statistics, which are accessible via the "stats.metadata",
740*572c4311Sfengbojiang    "stats.arenas.<i>.metadata.mapped", and
741*572c4311Sfengbojiang    "stats.arenas.<i>.metadata.allocated" mallctls.
742*572c4311Sfengbojiang  - Add the "stats.resident" mallctl, which reports the upper limit of
743*572c4311Sfengbojiang    physically resident memory mapped by the allocator.
744*572c4311Sfengbojiang  - Add per arena control over unused dirty page purging, via the
745*572c4311Sfengbojiang    "arenas.lg_dirty_mult", "arena.<i>.lg_dirty_mult", and
746*572c4311Sfengbojiang    "stats.arenas.<i>.lg_dirty_mult" mallctls.
747*572c4311Sfengbojiang  - Add the "prof.gdump" mallctl, which makes it possible to toggle the gdump
748*572c4311Sfengbojiang    feature on/off during program execution.
749*572c4311Sfengbojiang  - Add sdallocx(), which implements sized deallocation.  The primary
750*572c4311Sfengbojiang    optimization over dallocx() is the removal of a metadata read, which often
751*572c4311Sfengbojiang    suffers an L1 cache miss.
752*572c4311Sfengbojiang  - Add missing header includes in jemalloc/jemalloc.h, so that applications
753*572c4311Sfengbojiang    only have to #include <jemalloc/jemalloc.h>.
754*572c4311Sfengbojiang  - Add support for additional platforms:
755*572c4311Sfengbojiang    + Bitrig
756*572c4311Sfengbojiang    + Cygwin
757*572c4311Sfengbojiang    + DragonFlyBSD
758*572c4311Sfengbojiang    + iOS
759*572c4311Sfengbojiang    + OpenBSD
760*572c4311Sfengbojiang    + OpenRISC/or1k
761*572c4311Sfengbojiang
762*572c4311Sfengbojiang  Optimizations:
763*572c4311Sfengbojiang  - Maintain dirty runs in per arena LRUs rather than in per arena trees of
764*572c4311Sfengbojiang    dirty-run-containing chunks.  In practice this change significantly reduces
765*572c4311Sfengbojiang    dirty page purging volume.
766*572c4311Sfengbojiang  - Integrate whole chunks into the unused dirty page purging machinery.  This
767*572c4311Sfengbojiang    reduces the cost of repeated huge allocation/deallocation, because it
768*572c4311Sfengbojiang    effectively introduces a cache of chunks.
769*572c4311Sfengbojiang  - Split the arena chunk map into two separate arrays, in order to increase
770*572c4311Sfengbojiang    cache locality for the frequently accessed bits.
771*572c4311Sfengbojiang  - Move small run metadata out of runs, into arena chunk headers.  This reduces
772*572c4311Sfengbojiang    run fragmentation, smaller runs reduce external fragmentation for small size
773*572c4311Sfengbojiang    classes, and packed (less uniformly aligned) metadata layout improves CPU
774*572c4311Sfengbojiang    cache set distribution.
775*572c4311Sfengbojiang  - Randomly distribute large allocation base pointer alignment relative to page
776*572c4311Sfengbojiang    boundaries in order to more uniformly utilize CPU cache sets.  This can be
777*572c4311Sfengbojiang    disabled via the --disable-cache-oblivious configure option, and queried via
778*572c4311Sfengbojiang    the "config.cache_oblivious" mallctl.
779*572c4311Sfengbojiang  - Micro-optimize the fast paths for the public API functions.
780*572c4311Sfengbojiang  - Refactor thread-specific data to reside in a single structure.  This assures
781*572c4311Sfengbojiang    that only a single TLS read is necessary per call into the public API.
782*572c4311Sfengbojiang  - Implement in-place huge allocation growing and shrinking.
783*572c4311Sfengbojiang  - Refactor rtree (radix tree for chunk lookups) to be lock-free, and make
784*572c4311Sfengbojiang    additional optimizations that reduce maximum lookup depth to one or two
785*572c4311Sfengbojiang    levels.  This resolves what was a concurrency bottleneck for per arena huge
786*572c4311Sfengbojiang    allocation, because a global data structure is critical for determining
787*572c4311Sfengbojiang    which arenas own which huge allocations.
788*572c4311Sfengbojiang
789*572c4311Sfengbojiang  Incompatible changes:
790*572c4311Sfengbojiang  - Replace --enable-cc-silence with --disable-cc-silence to suppress spurious
791*572c4311Sfengbojiang    warnings by default.
792*572c4311Sfengbojiang  - Assure that the constness of malloc_usable_size()'s return type matches that
793*572c4311Sfengbojiang    of the system implementation.
794*572c4311Sfengbojiang  - Change the heap profile dump format to support per thread heap profiling,
795*572c4311Sfengbojiang    rename pprof to jeprof, and enhance it with the --thread=<n> option.  As a
796*572c4311Sfengbojiang    result, the bundled jeprof must now be used rather than the upstream
797*572c4311Sfengbojiang    (gperftools) pprof.
798*572c4311Sfengbojiang  - Disable "opt.prof_final" by default, in order to avoid atexit(3), which can
799*572c4311Sfengbojiang    internally deadlock on some platforms.
800*572c4311Sfengbojiang  - Change the "arenas.nlruns" mallctl type from size_t to unsigned.
801*572c4311Sfengbojiang  - Replace the "stats.arenas.<i>.bins.<j>.allocated" mallctl with
802*572c4311Sfengbojiang    "stats.arenas.<i>.bins.<j>.curregs".
803*572c4311Sfengbojiang  - Ignore MALLOC_CONF in set{uid,gid,cap} binaries.
804*572c4311Sfengbojiang  - Ignore MALLOCX_ARENA(a) in dallocx(), in favor of using the
805*572c4311Sfengbojiang    MALLOCX_TCACHE(tc) and MALLOCX_TCACHE_NONE flags to control tcache usage.
806*572c4311Sfengbojiang
807*572c4311Sfengbojiang  Removed features:
808*572c4311Sfengbojiang  - Remove the *allocm() API, which is superseded by the *allocx() API.
809*572c4311Sfengbojiang  - Remove the --enable-dss options, and make dss non-optional on all platforms
810*572c4311Sfengbojiang    which support sbrk(2).
811*572c4311Sfengbojiang  - Remove the "arenas.purge" mallctl, which was obsoleted by the
812*572c4311Sfengbojiang    "arena.<i>.purge" mallctl in 3.1.0.
813*572c4311Sfengbojiang  - Remove the unnecessary "opt.valgrind" mallctl; jemalloc automatically
814*572c4311Sfengbojiang    detects whether it is running inside Valgrind.
815*572c4311Sfengbojiang  - Remove the "stats.huge.allocated", "stats.huge.nmalloc", and
816*572c4311Sfengbojiang    "stats.huge.ndalloc" mallctls.
817*572c4311Sfengbojiang  - Remove the --enable-mremap option.
818*572c4311Sfengbojiang  - Remove the "stats.chunks.current", "stats.chunks.total", and
819*572c4311Sfengbojiang    "stats.chunks.high" mallctls.
820*572c4311Sfengbojiang
821*572c4311Sfengbojiang  Bug fixes:
822*572c4311Sfengbojiang  - Fix the cactive statistic to decrease (rather than increase) when active
823*572c4311Sfengbojiang    memory decreases.  This regression was first released in 3.5.0.
824*572c4311Sfengbojiang  - Fix OOM handling in memalign() and valloc().  A variant of this bug existed
825*572c4311Sfengbojiang    in all releases since 2.0.0, which introduced these functions.
826*572c4311Sfengbojiang  - Fix an OOM-related regression in arena_tcache_fill_small(), which could
827*572c4311Sfengbojiang    cause cache corruption on OOM.  This regression was present in all releases
828*572c4311Sfengbojiang    from 2.2.0 through 3.6.0.
829*572c4311Sfengbojiang  - Fix size class overflow handling for malloc(), posix_memalign(), memalign(),
830*572c4311Sfengbojiang    calloc(), and realloc() when profiling is enabled.
831*572c4311Sfengbojiang  - Fix the "arena.<i>.dss" mallctl to return an error if "primary" or
832*572c4311Sfengbojiang    "secondary" precedence is specified, but sbrk(2) is not supported.
833*572c4311Sfengbojiang  - Fix fallback lg_floor() implementations to handle extremely large inputs.
834*572c4311Sfengbojiang  - Ensure the default purgeable zone is after the default zone on OS X.
835*572c4311Sfengbojiang  - Fix latent bugs in atomic_*().
836*572c4311Sfengbojiang  - Fix the "arena.<i>.dss" mallctl to handle read-only calls.
837*572c4311Sfengbojiang  - Fix tls_model configuration to enable the initial-exec model when possible.
838*572c4311Sfengbojiang  - Mark malloc_conf as a weak symbol so that the application can override it.
839*572c4311Sfengbojiang  - Correctly detect glibc's adaptive pthread mutexes.
840*572c4311Sfengbojiang  - Fix the --without-export configure option.
841*572c4311Sfengbojiang
842*572c4311Sfengbojiang* 3.6.0 (March 31, 2014)
843*572c4311Sfengbojiang
844*572c4311Sfengbojiang  This version contains a critical bug fix for a regression present in 3.5.0 and
845*572c4311Sfengbojiang  3.5.1.
846*572c4311Sfengbojiang
847*572c4311Sfengbojiang  Bug fixes:
848*572c4311Sfengbojiang  - Fix a regression in arena_chunk_alloc() that caused crashes during
849*572c4311Sfengbojiang    small/large allocation if chunk allocation failed.  In the absence of this
850*572c4311Sfengbojiang    bug, chunk allocation failure would result in allocation failure, e.g.  NULL
851*572c4311Sfengbojiang    return from malloc().  This regression was introduced in 3.5.0.
852*572c4311Sfengbojiang  - Fix backtracing for gcc intrinsics-based backtracing by specifying
853*572c4311Sfengbojiang    -fno-omit-frame-pointer to gcc.  Note that the application (and all the
854*572c4311Sfengbojiang    libraries it links to) must also be compiled with this option for
855*572c4311Sfengbojiang    backtracing to be reliable.
856*572c4311Sfengbojiang  - Use dss allocation precedence for huge allocations as well as small/large
857*572c4311Sfengbojiang    allocations.
858*572c4311Sfengbojiang  - Fix test assertion failure message formatting.  This bug did not manifest on
859*572c4311Sfengbojiang    x86_64 systems because of implementation subtleties in va_list.
860*572c4311Sfengbojiang  - Fix inconsequential test failures for hash and SFMT code.
861*572c4311Sfengbojiang
862*572c4311Sfengbojiang  New features:
863*572c4311Sfengbojiang  - Support heap profiling on FreeBSD.  This feature depends on the proc
864*572c4311Sfengbojiang    filesystem being mounted during heap profile dumping.
865*572c4311Sfengbojiang
866*572c4311Sfengbojiang* 3.5.1 (February 25, 2014)
867*572c4311Sfengbojiang
868*572c4311Sfengbojiang  This version primarily addresses minor bugs in test code.
869*572c4311Sfengbojiang
870*572c4311Sfengbojiang  Bug fixes:
871*572c4311Sfengbojiang  - Configure Solaris/Illumos to use MADV_FREE.
872*572c4311Sfengbojiang  - Fix junk filling for mremap(2)-based huge reallocation.  This is only
873*572c4311Sfengbojiang    relevant if configuring with the --enable-mremap option specified.
874*572c4311Sfengbojiang  - Avoid compilation failure if 'restrict' C99 keyword is not supported by the
875*572c4311Sfengbojiang    compiler.
876*572c4311Sfengbojiang  - Add a configure test for SSE2 rather than assuming it is usable on i686
877*572c4311Sfengbojiang    systems.  This fixes test compilation errors, especially on 32-bit Linux
878*572c4311Sfengbojiang    systems.
879*572c4311Sfengbojiang  - Fix mallctl argument size mismatches (size_t vs. uint64_t) in the stats unit
880*572c4311Sfengbojiang    test.
881*572c4311Sfengbojiang  - Fix/remove flawed alignment-related overflow tests.
882*572c4311Sfengbojiang  - Prevent compiler optimizations that could change backtraces in the
883*572c4311Sfengbojiang    prof_accum unit test.
884*572c4311Sfengbojiang
885*572c4311Sfengbojiang* 3.5.0 (January 22, 2014)
886*572c4311Sfengbojiang
887*572c4311Sfengbojiang  This version focuses on refactoring and automated testing, though it also
888*572c4311Sfengbojiang  includes some non-trivial heap profiling optimizations not mentioned below.
889*572c4311Sfengbojiang
890*572c4311Sfengbojiang  New features:
891*572c4311Sfengbojiang  - Add the *allocx() API, which is a successor to the experimental *allocm()
892*572c4311Sfengbojiang    API.  The *allocx() functions are slightly simpler to use because they have
893*572c4311Sfengbojiang    fewer parameters, they directly return the results of primary interest, and
894*572c4311Sfengbojiang    mallocx()/rallocx() avoid the strict aliasing pitfall that
895*572c4311Sfengbojiang    allocm()/rallocm() share with posix_memalign().  Note that *allocm() is
896*572c4311Sfengbojiang    slated for removal in the next non-bugfix release.
897*572c4311Sfengbojiang  - Add support for LinuxThreads.
898*572c4311Sfengbojiang
899*572c4311Sfengbojiang  Bug fixes:
900*572c4311Sfengbojiang  - Unless heap profiling is enabled, disable floating point code and don't link
901*572c4311Sfengbojiang    with libm.  This, in combination with e.g. EXTRA_CFLAGS=-mno-sse on x64
902*572c4311Sfengbojiang    systems, makes it possible to completely disable floating point register
903*572c4311Sfengbojiang    use.  Some versions of glibc neglect to save/restore caller-saved floating
904*572c4311Sfengbojiang    point registers during dynamic lazy symbol loading, and the symbol loading
905*572c4311Sfengbojiang    code uses whatever malloc the application happens to have linked/loaded
906*572c4311Sfengbojiang    with, the result being potential floating point register corruption.
907*572c4311Sfengbojiang  - Report ENOMEM rather than EINVAL if an OOM occurs during heap profiling
908*572c4311Sfengbojiang    backtrace creation in imemalign().  This bug impacted posix_memalign() and
909*572c4311Sfengbojiang    aligned_alloc().
910*572c4311Sfengbojiang  - Fix a file descriptor leak in a prof_dump_maps() error path.
911*572c4311Sfengbojiang  - Fix prof_dump() to close the dump file descriptor for all relevant error
912*572c4311Sfengbojiang    paths.
913*572c4311Sfengbojiang  - Fix rallocm() to use the arena specified by the ALLOCM_ARENA(s) flag for
914*572c4311Sfengbojiang    allocation, not just deallocation.
915*572c4311Sfengbojiang  - Fix a data race for large allocation stats counters.
916*572c4311Sfengbojiang  - Fix a potential infinite loop during thread exit.  This bug occurred on
917*572c4311Sfengbojiang    Solaris, and could affect other platforms with similar pthreads TSD
918*572c4311Sfengbojiang    implementations.
919*572c4311Sfengbojiang  - Don't junk-fill reallocations unless usable size changes.  This fixes a
920*572c4311Sfengbojiang    violation of the *allocx()/*allocm() semantics.
921*572c4311Sfengbojiang  - Fix growing large reallocation to junk fill new space.
922*572c4311Sfengbojiang  - Fix huge deallocation to junk fill when munmap is disabled.
923*572c4311Sfengbojiang  - Change the default private namespace prefix from empty to je_, and change
924*572c4311Sfengbojiang    --with-private-namespace-prefix so that it prepends an additional prefix
925*572c4311Sfengbojiang    rather than replacing je_.  This reduces the likelihood of applications
926*572c4311Sfengbojiang    which statically link jemalloc experiencing symbol name collisions.
927*572c4311Sfengbojiang  - Add missing private namespace mangling (relevant when
928*572c4311Sfengbojiang    --with-private-namespace is specified).
929*572c4311Sfengbojiang  - Add and use JEMALLOC_INLINE_C so that static inline functions are marked as
930*572c4311Sfengbojiang    static even for debug builds.
931*572c4311Sfengbojiang  - Add a missing mutex unlock in a malloc_init_hard() error path.  In practice
932*572c4311Sfengbojiang    this error path is never executed.
933*572c4311Sfengbojiang  - Fix numerous bugs in malloc_strotumax() error handling/reporting.  These
934*572c4311Sfengbojiang    bugs had no impact except for malformed inputs.
935*572c4311Sfengbojiang  - Fix numerous bugs in malloc_snprintf().  These bugs were not exercised by
936*572c4311Sfengbojiang    existing calls, so they had no impact.
937*572c4311Sfengbojiang
938*572c4311Sfengbojiang* 3.4.1 (October 20, 2013)
939*572c4311Sfengbojiang
940*572c4311Sfengbojiang  Bug fixes:
941*572c4311Sfengbojiang  - Fix a race in the "arenas.extend" mallctl that could cause memory corruption
942*572c4311Sfengbojiang    of internal data structures and subsequent crashes.
943*572c4311Sfengbojiang  - Fix Valgrind integration flaws that caused Valgrind warnings about reads of
944*572c4311Sfengbojiang    uninitialized memory in:
945*572c4311Sfengbojiang    + arena chunk headers
946*572c4311Sfengbojiang    + internal zero-initialized data structures (relevant to tcache and prof
947*572c4311Sfengbojiang      code)
948*572c4311Sfengbojiang  - Preserve errno during the first allocation.  A readlink(2) call during
949*572c4311Sfengbojiang    initialization fails unless /etc/malloc.conf exists, so errno was typically
950*572c4311Sfengbojiang    set during the first allocation prior to this fix.
951*572c4311Sfengbojiang  - Fix compilation warnings reported by gcc 4.8.1.
952*572c4311Sfengbojiang
953*572c4311Sfengbojiang* 3.4.0 (June 2, 2013)
954*572c4311Sfengbojiang
955*572c4311Sfengbojiang  This version is essentially a small bugfix release, but the addition of
956*572c4311Sfengbojiang  aarch64 support requires that the minor version be incremented.
957*572c4311Sfengbojiang
958*572c4311Sfengbojiang  Bug fixes:
959*572c4311Sfengbojiang  - Fix race-triggered deadlocks in chunk_record().  These deadlocks were
960*572c4311Sfengbojiang    typically triggered by multiple threads concurrently deallocating huge
961*572c4311Sfengbojiang    objects.
962*572c4311Sfengbojiang
963*572c4311Sfengbojiang  New features:
964*572c4311Sfengbojiang  - Add support for the aarch64 architecture.
965*572c4311Sfengbojiang
966*572c4311Sfengbojiang* 3.3.1 (March 6, 2013)
967*572c4311Sfengbojiang
968*572c4311Sfengbojiang  This version fixes bugs that are typically encountered only when utilizing
969*572c4311Sfengbojiang  custom run-time options.
970*572c4311Sfengbojiang
971*572c4311Sfengbojiang  Bug fixes:
972*572c4311Sfengbojiang  - Fix a locking order bug that could cause deadlock during fork if heap
973*572c4311Sfengbojiang    profiling were enabled.
974*572c4311Sfengbojiang  - Fix a chunk recycling bug that could cause the allocator to lose track of
975*572c4311Sfengbojiang    whether a chunk was zeroed.  On FreeBSD, NetBSD, and OS X, it could cause
976*572c4311Sfengbojiang    corruption if allocating via sbrk(2) (unlikely unless running with the
977*572c4311Sfengbojiang    "dss:primary" option specified).  This was completely harmless on Linux
978*572c4311Sfengbojiang    unless using mlockall(2) (and unlikely even then, unless the
979*572c4311Sfengbojiang    --disable-munmap configure option or the "dss:primary" option was
980*572c4311Sfengbojiang    specified).  This regression was introduced in 3.1.0 by the
981*572c4311Sfengbojiang    mlockall(2)/madvise(2) interaction fix.
982*572c4311Sfengbojiang  - Fix TLS-related memory corruption that could occur during thread exit if the
983*572c4311Sfengbojiang    thread never allocated memory.  Only the quarantine and prof facilities were
984*572c4311Sfengbojiang    susceptible.
985*572c4311Sfengbojiang  - Fix two quarantine bugs:
986*572c4311Sfengbojiang    + Internal reallocation of the quarantined object array leaked the old
987*572c4311Sfengbojiang      array.
988*572c4311Sfengbojiang    + Reallocation failure for internal reallocation of the quarantined object
989*572c4311Sfengbojiang      array (very unlikely) resulted in memory corruption.
990*572c4311Sfengbojiang  - Fix Valgrind integration to annotate all internally allocated memory in a
991*572c4311Sfengbojiang    way that keeps Valgrind happy about internal data structure access.
992*572c4311Sfengbojiang  - Fix building for s390 systems.
993*572c4311Sfengbojiang
994*572c4311Sfengbojiang* 3.3.0 (January 23, 2013)
995*572c4311Sfengbojiang
996*572c4311Sfengbojiang  This version includes a few minor performance improvements in addition to the
997*572c4311Sfengbojiang  listed new features and bug fixes.
998*572c4311Sfengbojiang
999*572c4311Sfengbojiang  New features:
1000*572c4311Sfengbojiang  - Add clipping support to lg_chunk option processing.
1001*572c4311Sfengbojiang  - Add the --enable-ivsalloc option.
1002*572c4311Sfengbojiang  - Add the --without-export option.
1003*572c4311Sfengbojiang  - Add the --disable-zone-allocator option.
1004*572c4311Sfengbojiang
1005*572c4311Sfengbojiang  Bug fixes:
1006*572c4311Sfengbojiang  - Fix "arenas.extend" mallctl to output the number of arenas.
1007*572c4311Sfengbojiang  - Fix chunk_recycle() to unconditionally inform Valgrind that returned memory
1008*572c4311Sfengbojiang    is undefined.
1009*572c4311Sfengbojiang  - Fix build break on FreeBSD related to alloca.h.
1010*572c4311Sfengbojiang
1011*572c4311Sfengbojiang* 3.2.0 (November 9, 2012)
1012*572c4311Sfengbojiang
1013*572c4311Sfengbojiang  In addition to a couple of bug fixes, this version modifies page run
1014*572c4311Sfengbojiang  allocation and dirty page purging algorithms in order to better control
1015*572c4311Sfengbojiang  page-level virtual memory fragmentation.
1016*572c4311Sfengbojiang
1017*572c4311Sfengbojiang  Incompatible changes:
1018*572c4311Sfengbojiang  - Change the "opt.lg_dirty_mult" default from 5 to 3 (32:1 to 8:1).
1019*572c4311Sfengbojiang
1020*572c4311Sfengbojiang  Bug fixes:
1021*572c4311Sfengbojiang  - Fix dss/mmap allocation precedence code to use recyclable mmap memory only
1022*572c4311Sfengbojiang    after primary dss allocation fails.
1023*572c4311Sfengbojiang  - Fix deadlock in the "arenas.purge" mallctl.  This regression was introduced
1024*572c4311Sfengbojiang    in 3.1.0 by the addition of the "arena.<i>.purge" mallctl.
1025*572c4311Sfengbojiang
1026*572c4311Sfengbojiang* 3.1.0 (October 16, 2012)
1027*572c4311Sfengbojiang
1028*572c4311Sfengbojiang  New features:
1029*572c4311Sfengbojiang  - Auto-detect whether running inside Valgrind, thus removing the need to
1030*572c4311Sfengbojiang    manually specify MALLOC_CONF=valgrind:true.
1031*572c4311Sfengbojiang  - Add the "arenas.extend" mallctl, which allows applications to create
1032*572c4311Sfengbojiang    manually managed arenas.
1033*572c4311Sfengbojiang  - Add the ALLOCM_ARENA() flag for {,r,d}allocm().
1034*572c4311Sfengbojiang  - Add the "opt.dss", "arena.<i>.dss", and "stats.arenas.<i>.dss" mallctls,
1035*572c4311Sfengbojiang    which provide control over dss/mmap precedence.
1036*572c4311Sfengbojiang  - Add the "arena.<i>.purge" mallctl, which obsoletes "arenas.purge".
1037*572c4311Sfengbojiang  - Define LG_QUANTUM for hppa.
1038*572c4311Sfengbojiang
1039*572c4311Sfengbojiang  Incompatible changes:
1040*572c4311Sfengbojiang  - Disable tcache by default if running inside Valgrind, in order to avoid
1041*572c4311Sfengbojiang    making unallocated objects appear reachable to Valgrind.
1042*572c4311Sfengbojiang  - Drop const from malloc_usable_size() argument on Linux.
1043*572c4311Sfengbojiang
1044*572c4311Sfengbojiang  Bug fixes:
1045*572c4311Sfengbojiang  - Fix heap profiling crash if sampled object is freed via realloc(p, 0).
1046*572c4311Sfengbojiang  - Remove const from __*_hook variable declarations, so that glibc can modify
1047*572c4311Sfengbojiang    them during process forking.
1048*572c4311Sfengbojiang  - Fix mlockall(2)/madvise(2) interaction.
1049*572c4311Sfengbojiang  - Fix fork(2)-related deadlocks.
1050*572c4311Sfengbojiang  - Fix error return value for "thread.tcache.enabled" mallctl.
1051*572c4311Sfengbojiang
1052*572c4311Sfengbojiang* 3.0.0 (May 11, 2012)
1053*572c4311Sfengbojiang
1054*572c4311Sfengbojiang  Although this version adds some major new features, the primary focus is on
1055*572c4311Sfengbojiang  internal code cleanup that facilitates maintainability and portability, most
1056*572c4311Sfengbojiang  of which is not reflected in the ChangeLog.  This is the first release to
1057*572c4311Sfengbojiang  incorporate substantial contributions from numerous other developers, and the
1058*572c4311Sfengbojiang  result is a more broadly useful allocator (see the git revision history for
1059*572c4311Sfengbojiang  contribution details).  Note that the license has been unified, thanks to
1060*572c4311Sfengbojiang  Facebook granting a license under the same terms as the other copyright
1061*572c4311Sfengbojiang  holders (see COPYING).
1062*572c4311Sfengbojiang
1063*572c4311Sfengbojiang  New features:
1064*572c4311Sfengbojiang  - Implement Valgrind support, redzones, and quarantine.
1065*572c4311Sfengbojiang  - Add support for additional platforms:
1066*572c4311Sfengbojiang    + FreeBSD
1067*572c4311Sfengbojiang    + Mac OS X Lion
1068*572c4311Sfengbojiang    + MinGW
1069*572c4311Sfengbojiang    + Windows (no support yet for replacing the system malloc)
1070*572c4311Sfengbojiang  - Add support for additional architectures:
1071*572c4311Sfengbojiang    + MIPS
1072*572c4311Sfengbojiang    + SH4
1073*572c4311Sfengbojiang    + Tilera
1074*572c4311Sfengbojiang  - Add support for cross compiling.
1075*572c4311Sfengbojiang  - Add nallocm(), which rounds a request size up to the nearest size class
1076*572c4311Sfengbojiang    without actually allocating.
1077*572c4311Sfengbojiang  - Implement aligned_alloc() (blame C11).
1078*572c4311Sfengbojiang  - Add the "thread.tcache.enabled" mallctl.
1079*572c4311Sfengbojiang  - Add the "opt.prof_final" mallctl.
1080*572c4311Sfengbojiang  - Update pprof (from gperftools 2.0).
1081*572c4311Sfengbojiang  - Add the --with-mangling option.
1082*572c4311Sfengbojiang  - Add the --disable-experimental option.
1083*572c4311Sfengbojiang  - Add the --disable-munmap option, and make it the default on Linux.
1084*572c4311Sfengbojiang  - Add the --enable-mremap option, which disables use of mremap(2) by default.
1085*572c4311Sfengbojiang
1086*572c4311Sfengbojiang  Incompatible changes:
1087*572c4311Sfengbojiang  - Enable stats by default.
1088*572c4311Sfengbojiang  - Enable fill by default.
1089*572c4311Sfengbojiang  - Disable lazy locking by default.
1090*572c4311Sfengbojiang  - Rename the "tcache.flush" mallctl to "thread.tcache.flush".
1091*572c4311Sfengbojiang  - Rename the "arenas.pagesize" mallctl to "arenas.page".
1092*572c4311Sfengbojiang  - Change the "opt.lg_prof_sample" default from 0 to 19 (1 B to 512 KiB).
1093*572c4311Sfengbojiang  - Change the "opt.prof_accum" default from true to false.
1094*572c4311Sfengbojiang
1095*572c4311Sfengbojiang  Removed features:
1096*572c4311Sfengbojiang  - Remove the swap feature, including the "config.swap", "swap.avail",
1097*572c4311Sfengbojiang    "swap.prezeroed", "swap.nfds", and "swap.fds" mallctls.
1098*572c4311Sfengbojiang  - Remove highruns statistics, including the
1099*572c4311Sfengbojiang    "stats.arenas.<i>.bins.<j>.highruns" and
1100*572c4311Sfengbojiang    "stats.arenas.<i>.lruns.<j>.highruns" mallctls.
1101*572c4311Sfengbojiang  - As part of small size class refactoring, remove the "opt.lg_[qc]space_max",
1102*572c4311Sfengbojiang    "arenas.cacheline", "arenas.subpage", "arenas.[tqcs]space_{min,max}", and
1103*572c4311Sfengbojiang    "arenas.[tqcs]bins" mallctls.
1104*572c4311Sfengbojiang  - Remove the "arenas.chunksize" mallctl.
1105*572c4311Sfengbojiang  - Remove the "opt.lg_prof_tcmax" option.
1106*572c4311Sfengbojiang  - Remove the "opt.lg_prof_bt_max" option.
1107*572c4311Sfengbojiang  - Remove the "opt.lg_tcache_gc_sweep" option.
1108*572c4311Sfengbojiang  - Remove the --disable-tiny option, including the "config.tiny" mallctl.
1109*572c4311Sfengbojiang  - Remove the --enable-dynamic-page-shift configure option.
1110*572c4311Sfengbojiang  - Remove the --enable-sysv configure option.
1111*572c4311Sfengbojiang
1112*572c4311Sfengbojiang  Bug fixes:
1113*572c4311Sfengbojiang  - Fix a statistics-related bug in the "thread.arena" mallctl that could cause
1114*572c4311Sfengbojiang    invalid statistics and crashes.
1115*572c4311Sfengbojiang  - Work around TLS deallocation via free() on Linux.  This bug could cause
1116*572c4311Sfengbojiang    write-after-free memory corruption.
1117*572c4311Sfengbojiang  - Fix a potential deadlock that could occur during interval- and
1118*572c4311Sfengbojiang    growth-triggered heap profile dumps.
1119*572c4311Sfengbojiang  - Fix large calloc() zeroing bugs due to dropping chunk map unzeroed flags.
1120*572c4311Sfengbojiang  - Fix chunk_alloc_dss() to stop claiming memory is zeroed.  This bug could
1121*572c4311Sfengbojiang    cause memory corruption and crashes with --enable-dss specified.
1122*572c4311Sfengbojiang  - Fix fork-related bugs that could cause deadlock in children between fork
1123*572c4311Sfengbojiang    and exec.
1124*572c4311Sfengbojiang  - Fix malloc_stats_print() to honor 'b' and 'l' in the opts parameter.
1125*572c4311Sfengbojiang  - Fix realloc(p, 0) to act like free(p).
1126*572c4311Sfengbojiang  - Do not enforce minimum alignment in memalign().
1127*572c4311Sfengbojiang  - Check for NULL pointer in malloc_usable_size().
1128*572c4311Sfengbojiang  - Fix an off-by-one heap profile statistics bug that could be observed in
1129*572c4311Sfengbojiang    interval- and growth-triggered heap profiles.
1130*572c4311Sfengbojiang  - Fix the "epoch" mallctl to update cached stats even if the passed in epoch
1131*572c4311Sfengbojiang    is 0.
1132*572c4311Sfengbojiang  - Fix bin->runcur management to fix a layout policy bug.  This bug did not
1133*572c4311Sfengbojiang    affect correctness.
1134*572c4311Sfengbojiang  - Fix a bug in choose_arena_hard() that potentially caused more arenas to be
1135*572c4311Sfengbojiang    initialized than necessary.
1136*572c4311Sfengbojiang  - Add missing "opt.lg_tcache_max" mallctl implementation.
1137*572c4311Sfengbojiang  - Use glibc allocator hooks to make mixed allocator usage less likely.
1138*572c4311Sfengbojiang  - Fix build issues for --disable-tcache.
1139*572c4311Sfengbojiang  - Don't mangle pthread_create() when --with-private-namespace is specified.
1140*572c4311Sfengbojiang
1141*572c4311Sfengbojiang* 2.2.5 (November 14, 2011)
1142*572c4311Sfengbojiang
1143*572c4311Sfengbojiang  Bug fixes:
1144*572c4311Sfengbojiang  - Fix huge_ralloc() race when using mremap(2).  This is a serious bug that
1145*572c4311Sfengbojiang    could cause memory corruption and/or crashes.
1146*572c4311Sfengbojiang  - Fix huge_ralloc() to maintain chunk statistics.
1147*572c4311Sfengbojiang  - Fix malloc_stats_print(..., "a") output.
1148*572c4311Sfengbojiang
1149*572c4311Sfengbojiang* 2.2.4 (November 5, 2011)
1150*572c4311Sfengbojiang
1151*572c4311Sfengbojiang  Bug fixes:
1152*572c4311Sfengbojiang  - Initialize arenas_tsd before using it.  This bug existed for 2.2.[0-3], as
1153*572c4311Sfengbojiang    well as for --disable-tls builds in earlier releases.
1154*572c4311Sfengbojiang  - Do not assume a 4 KiB page size in test/rallocm.c.
1155*572c4311Sfengbojiang
1156*572c4311Sfengbojiang* 2.2.3 (August 31, 2011)
1157*572c4311Sfengbojiang
1158*572c4311Sfengbojiang  This version fixes numerous bugs related to heap profiling.
1159*572c4311Sfengbojiang
1160*572c4311Sfengbojiang  Bug fixes:
1161*572c4311Sfengbojiang  - Fix a prof-related race condition.  This bug could cause memory corruption,
1162*572c4311Sfengbojiang    but only occurred in non-default configurations (prof_accum:false).
1163*572c4311Sfengbojiang  - Fix off-by-one backtracing issues (make sure that prof_alloc_prep() is
1164*572c4311Sfengbojiang    excluded from backtraces).
1165*572c4311Sfengbojiang  - Fix a prof-related bug in realloc() (only triggered by OOM errors).
1166*572c4311Sfengbojiang  - Fix prof-related bugs in allocm() and rallocm().
1167*572c4311Sfengbojiang  - Fix prof_tdata_cleanup() for --disable-tls builds.
1168*572c4311Sfengbojiang  - Fix a relative include path, to fix objdir builds.
1169*572c4311Sfengbojiang
1170*572c4311Sfengbojiang* 2.2.2 (July 30, 2011)
1171*572c4311Sfengbojiang
1172*572c4311Sfengbojiang  Bug fixes:
1173*572c4311Sfengbojiang  - Fix a build error for --disable-tcache.
1174*572c4311Sfengbojiang  - Fix assertions in arena_purge() (for real this time).
1175*572c4311Sfengbojiang  - Add the --with-private-namespace option.  This is a workaround for symbol
1176*572c4311Sfengbojiang    conflicts that can inadvertently arise when using static libraries.
1177*572c4311Sfengbojiang
1178*572c4311Sfengbojiang* 2.2.1 (March 30, 2011)
1179*572c4311Sfengbojiang
1180*572c4311Sfengbojiang  Bug fixes:
1181*572c4311Sfengbojiang  - Implement atomic operations for x86/x64.  This fixes compilation failures
1182*572c4311Sfengbojiang    for versions of gcc that are still in wide use.
1183*572c4311Sfengbojiang  - Fix an assertion in arena_purge().
1184*572c4311Sfengbojiang
1185*572c4311Sfengbojiang* 2.2.0 (March 22, 2011)
1186*572c4311Sfengbojiang
1187*572c4311Sfengbojiang  This version incorporates several improvements to algorithms and data
1188*572c4311Sfengbojiang  structures that tend to reduce fragmentation and increase speed.
1189*572c4311Sfengbojiang
1190*572c4311Sfengbojiang  New features:
1191*572c4311Sfengbojiang  - Add the "stats.cactive" mallctl.
1192*572c4311Sfengbojiang  - Update pprof (from google-perftools 1.7).
1193*572c4311Sfengbojiang  - Improve backtracing-related configuration logic, and add the
1194*572c4311Sfengbojiang    --disable-prof-libgcc option.
1195*572c4311Sfengbojiang
1196*572c4311Sfengbojiang  Bug fixes:
1197*572c4311Sfengbojiang  - Change default symbol visibility from "internal", to "hidden", which
1198*572c4311Sfengbojiang    decreases the overhead of library-internal function calls.
1199*572c4311Sfengbojiang  - Fix symbol visibility so that it is also set on OS X.
1200*572c4311Sfengbojiang  - Fix a build dependency regression caused by the introduction of the .pic.o
1201*572c4311Sfengbojiang    suffix for PIC object files.
1202*572c4311Sfengbojiang  - Add missing checks for mutex initialization failures.
1203*572c4311Sfengbojiang  - Don't use libgcc-based backtracing except on x64, where it is known to work.
1204*572c4311Sfengbojiang  - Fix deadlocks on OS X that were due to memory allocation in
1205*572c4311Sfengbojiang    pthread_mutex_lock().
1206*572c4311Sfengbojiang  - Heap profiling-specific fixes:
1207*572c4311Sfengbojiang    + Fix memory corruption due to integer overflow in small region index
1208*572c4311Sfengbojiang      computation, when using a small enough sample interval that profiling
1209*572c4311Sfengbojiang      context pointers are stored in small run headers.
1210*572c4311Sfengbojiang    + Fix a bootstrap ordering bug that only occurred with TLS disabled.
1211*572c4311Sfengbojiang    + Fix a rallocm() rsize bug.
1212*572c4311Sfengbojiang    + Fix error detection bugs for aligned memory allocation.
1213*572c4311Sfengbojiang
1214*572c4311Sfengbojiang* 2.1.3 (March 14, 2011)
1215*572c4311Sfengbojiang
1216*572c4311Sfengbojiang  Bug fixes:
1217*572c4311Sfengbojiang  - Fix a cpp logic regression (due to the "thread.{de,}allocatedp" mallctl fix
1218*572c4311Sfengbojiang    for OS X in 2.1.2).
1219*572c4311Sfengbojiang  - Fix a "thread.arena" mallctl bug.
1220*572c4311Sfengbojiang  - Fix a thread cache stats merging bug.
1221*572c4311Sfengbojiang
1222*572c4311Sfengbojiang* 2.1.2 (March 2, 2011)
1223*572c4311Sfengbojiang
1224*572c4311Sfengbojiang  Bug fixes:
1225*572c4311Sfengbojiang  - Fix "thread.{de,}allocatedp" mallctl for OS X.
1226*572c4311Sfengbojiang  - Add missing jemalloc.a to build system.
1227*572c4311Sfengbojiang
1228*572c4311Sfengbojiang* 2.1.1 (January 31, 2011)
1229*572c4311Sfengbojiang
1230*572c4311Sfengbojiang  Bug fixes:
1231*572c4311Sfengbojiang  - Fix aligned huge reallocation (affected allocm()).
1232*572c4311Sfengbojiang  - Fix the ALLOCM_LG_ALIGN macro definition.
1233*572c4311Sfengbojiang  - Fix a heap dumping deadlock.
1234*572c4311Sfengbojiang  - Fix a "thread.arena" mallctl bug.
1235*572c4311Sfengbojiang
1236*572c4311Sfengbojiang* 2.1.0 (December 3, 2010)
1237*572c4311Sfengbojiang
1238*572c4311Sfengbojiang  This version incorporates some optimizations that can't quite be considered
1239*572c4311Sfengbojiang  bug fixes.
1240*572c4311Sfengbojiang
1241*572c4311Sfengbojiang  New features:
1242*572c4311Sfengbojiang  - Use Linux's mremap(2) for huge object reallocation when possible.
1243*572c4311Sfengbojiang  - Avoid locking in mallctl*() when possible.
1244*572c4311Sfengbojiang  - Add the "thread.[de]allocatedp" mallctl's.
1245*572c4311Sfengbojiang  - Convert the manual page source from roff to DocBook, and generate both roff
1246*572c4311Sfengbojiang    and HTML manuals.
1247*572c4311Sfengbojiang
1248*572c4311Sfengbojiang  Bug fixes:
1249*572c4311Sfengbojiang  - Fix a crash due to incorrect bootstrap ordering.  This only impacted
1250*572c4311Sfengbojiang    --enable-debug --enable-dss configurations.
1251*572c4311Sfengbojiang  - Fix a minor statistics bug for mallctl("swap.avail", ...).
1252*572c4311Sfengbojiang
1253*572c4311Sfengbojiang* 2.0.1 (October 29, 2010)
1254*572c4311Sfengbojiang
1255*572c4311Sfengbojiang  Bug fixes:
1256*572c4311Sfengbojiang  - Fix a race condition in heap profiling that could cause undefined behavior
1257*572c4311Sfengbojiang    if "opt.prof_accum" were disabled.
1258*572c4311Sfengbojiang  - Add missing mutex unlocks for some OOM error paths in the heap profiling
1259*572c4311Sfengbojiang    code.
1260*572c4311Sfengbojiang  - Fix a compilation error for non-C99 builds.
1261*572c4311Sfengbojiang
1262*572c4311Sfengbojiang* 2.0.0 (October 24, 2010)
1263*572c4311Sfengbojiang
1264*572c4311Sfengbojiang  This version focuses on the experimental *allocm() API, and on improved
1265*572c4311Sfengbojiang  run-time configuration/introspection.  Nonetheless, numerous performance
1266*572c4311Sfengbojiang  improvements are also included.
1267*572c4311Sfengbojiang
1268*572c4311Sfengbojiang  New features:
1269*572c4311Sfengbojiang  - Implement the experimental {,r,s,d}allocm() API, which provides a superset
1270*572c4311Sfengbojiang    of the functionality available via malloc(), calloc(), posix_memalign(),
1271*572c4311Sfengbojiang    realloc(), malloc_usable_size(), and free().  These functions can be used to
1272*572c4311Sfengbojiang    allocate/reallocate aligned zeroed memory, ask for optional extra memory
1273*572c4311Sfengbojiang    during reallocation, prevent object movement during reallocation, etc.
1274*572c4311Sfengbojiang  - Replace JEMALLOC_OPTIONS/JEMALLOC_PROF_PREFIX with MALLOC_CONF, which is
1275*572c4311Sfengbojiang    more human-readable, and more flexible.  For example:
1276*572c4311Sfengbojiang      JEMALLOC_OPTIONS=AJP
1277*572c4311Sfengbojiang    is now:
1278*572c4311Sfengbojiang      MALLOC_CONF=abort:true,fill:true,stats_print:true
1279*572c4311Sfengbojiang  - Port to Apple OS X.  Sponsored by Mozilla.
1280*572c4311Sfengbojiang  - Make it possible for the application to control thread-->arena mappings via
1281*572c4311Sfengbojiang    the "thread.arena" mallctl.
1282*572c4311Sfengbojiang  - Add compile-time support for all TLS-related functionality via pthreads TSD.
1283*572c4311Sfengbojiang    This is mainly of interest for OS X, which does not support TLS, but has a
1284*572c4311Sfengbojiang    TSD implementation with similar performance.
1285*572c4311Sfengbojiang  - Override memalign() and valloc() if they are provided by the system.
1286*572c4311Sfengbojiang  - Add the "arenas.purge" mallctl, which can be used to synchronously purge all
1287*572c4311Sfengbojiang    dirty unused pages.
1288*572c4311Sfengbojiang  - Make cumulative heap profiling data optional, so that it is possible to
1289*572c4311Sfengbojiang    limit the amount of memory consumed by heap profiling data structures.
1290*572c4311Sfengbojiang  - Add per thread allocation counters that can be accessed via the
1291*572c4311Sfengbojiang    "thread.allocated" and "thread.deallocated" mallctls.
1292*572c4311Sfengbojiang
1293*572c4311Sfengbojiang  Incompatible changes:
1294*572c4311Sfengbojiang  - Remove JEMALLOC_OPTIONS and malloc_options (see MALLOC_CONF above).
1295*572c4311Sfengbojiang  - Increase default backtrace depth from 4 to 128 for heap profiling.
1296*572c4311Sfengbojiang  - Disable interval-based profile dumps by default.
1297*572c4311Sfengbojiang
1298*572c4311Sfengbojiang  Bug fixes:
1299*572c4311Sfengbojiang  - Remove bad assertions in fork handler functions.  These assertions could
1300*572c4311Sfengbojiang    cause aborts for some combinations of configure settings.
1301*572c4311Sfengbojiang  - Fix strerror_r() usage to deal with non-standard semantics in GNU libc.
1302*572c4311Sfengbojiang  - Fix leak context reporting.  This bug tended to cause the number of contexts
1303*572c4311Sfengbojiang    to be underreported (though the reported number of objects and bytes were
1304*572c4311Sfengbojiang    correct).
1305*572c4311Sfengbojiang  - Fix a realloc() bug for large in-place growing reallocation.  This bug could
1306*572c4311Sfengbojiang    cause memory corruption, but it was hard to trigger.
1307*572c4311Sfengbojiang  - Fix an allocation bug for small allocations that could be triggered if
1308*572c4311Sfengbojiang    multiple threads raced to create a new run of backing pages.
1309*572c4311Sfengbojiang  - Enhance the heap profiler to trigger samples based on usable size, rather
1310*572c4311Sfengbojiang    than request size.
1311*572c4311Sfengbojiang  - Fix a heap profiling bug due to sometimes losing track of requested object
1312*572c4311Sfengbojiang    size for sampled objects.
1313*572c4311Sfengbojiang
1314*572c4311Sfengbojiang* 1.0.3 (August 12, 2010)
1315*572c4311Sfengbojiang
1316*572c4311Sfengbojiang  Bug fixes:
1317*572c4311Sfengbojiang  - Fix the libunwind-based implementation of stack backtracing (used for heap
1318*572c4311Sfengbojiang    profiling).  This bug could cause zero-length backtraces to be reported.
1319*572c4311Sfengbojiang  - Add a missing mutex unlock in library initialization code.  If multiple
1320*572c4311Sfengbojiang    threads raced to initialize malloc, some of them could end up permanently
1321*572c4311Sfengbojiang    blocked.
1322*572c4311Sfengbojiang
1323*572c4311Sfengbojiang* 1.0.2 (May 11, 2010)
1324*572c4311Sfengbojiang
1325*572c4311Sfengbojiang  Bug fixes:
1326*572c4311Sfengbojiang  - Fix junk filling of large objects, which could cause memory corruption.
1327*572c4311Sfengbojiang  - Add MAP_NORESERVE support for chunk mapping, because otherwise virtual
1328*572c4311Sfengbojiang    memory limits could cause swap file configuration to fail.  Contributed by
1329*572c4311Sfengbojiang    Jordan DeLong.
1330*572c4311Sfengbojiang
1331*572c4311Sfengbojiang* 1.0.1 (April 14, 2010)
1332*572c4311Sfengbojiang
1333*572c4311Sfengbojiang  Bug fixes:
1334*572c4311Sfengbojiang  - Fix compilation when --enable-fill is specified.
1335*572c4311Sfengbojiang  - Fix threads-related profiling bugs that affected accuracy and caused memory
1336*572c4311Sfengbojiang    to be leaked during thread exit.
1337*572c4311Sfengbojiang  - Fix dirty page purging race conditions that could cause crashes.
1338*572c4311Sfengbojiang  - Fix crash in tcache flushing code during thread destruction.
1339*572c4311Sfengbojiang
1340*572c4311Sfengbojiang* 1.0.0 (April 11, 2010)
1341*572c4311Sfengbojiang
1342*572c4311Sfengbojiang  This release focuses on speed and run-time introspection.  Numerous
1343*572c4311Sfengbojiang  algorithmic improvements make this release substantially faster than its
1344*572c4311Sfengbojiang  predecessors.
1345*572c4311Sfengbojiang
1346*572c4311Sfengbojiang  New features:
1347*572c4311Sfengbojiang  - Implement autoconf-based configuration system.
1348*572c4311Sfengbojiang  - Add mallctl*(), for the purposes of introspection and run-time
1349*572c4311Sfengbojiang    configuration.
1350*572c4311Sfengbojiang  - Make it possible for the application to manually flush a thread's cache, via
1351*572c4311Sfengbojiang    the "tcache.flush" mallctl.
1352*572c4311Sfengbojiang  - Base maximum dirty page count on proportion of active memory.
1353*572c4311Sfengbojiang  - Compute various additional run-time statistics, including per size class
1354*572c4311Sfengbojiang    statistics for large objects.
1355*572c4311Sfengbojiang  - Expose malloc_stats_print(), which can be called repeatedly by the
1356*572c4311Sfengbojiang    application.
1357*572c4311Sfengbojiang  - Simplify the malloc_message() signature to only take one string argument,
1358*572c4311Sfengbojiang    and incorporate an opaque data pointer argument for use by the application
1359*572c4311Sfengbojiang    in combination with malloc_stats_print().
1360*572c4311Sfengbojiang  - Add support for allocation backed by one or more swap files, and allow the
1361*572c4311Sfengbojiang    application to disable over-commit if swap files are in use.
1362*572c4311Sfengbojiang  - Implement allocation profiling and leak checking.
1363*572c4311Sfengbojiang
1364*572c4311Sfengbojiang  Removed features:
1365*572c4311Sfengbojiang  - Remove the dynamic arena rebalancing code, since thread-specific caching
1366*572c4311Sfengbojiang    reduces its utility.
1367*572c4311Sfengbojiang
1368*572c4311Sfengbojiang  Bug fixes:
1369*572c4311Sfengbojiang  - Modify chunk allocation to work when address space layout randomization
1370*572c4311Sfengbojiang    (ASLR) is in use.
1371*572c4311Sfengbojiang  - Fix thread cleanup bugs related to TLS destruction.
1372*572c4311Sfengbojiang  - Handle 0-size allocation requests in posix_memalign().
1373*572c4311Sfengbojiang  - Fix a chunk leak.  The leaked chunks were never touched, so this impacted
1374*572c4311Sfengbojiang    virtual memory usage, but not physical memory usage.
1375*572c4311Sfengbojiang
1376*572c4311Sfengbojiang* linux_2008082[78]a (August 27/28, 2008)
1377*572c4311Sfengbojiang
1378*572c4311Sfengbojiang  These snapshot releases are the simple result of incorporating Linux-specific
1379*572c4311Sfengbojiang  support into the FreeBSD malloc sources.
1380*572c4311Sfengbojiang
1381*572c4311Sfengbojiang--------------------------------------------------------------------------------
1382*572c4311Sfengbojiangvim:filetype=text:textwidth=80
1383