Go to file
David Goldblatt 3f685e8824 Protect the rtree/extent interactions with a mutex pool.
Instead of embedding a lock bit in rtree leaf elements, we associate extents
with a small set of mutexes.  This gets us two things:

- We can use the system mutexes.  This (hypothetically) protects us from
  priority inversion, and lets us stop doing a backoff/sleep loop, instead
  opting for precise wakeups from the mutex.
- Cuts down on the number of mutex acquisitions we have to do (from 4 in the
  worst case to two).

We end up simplifying most of the rtree code (which no longer has to deal with
locking or concurrency at all), at the cost of additional complexity in the
extent code: since the mutex protecting the rtree leaf elements is determined by
reading the extent out of those elements, the initial read is racy, so that we
may acquire an out of date mutex.  We re-check the extent in the leaf after
acquiring the mutex to protect us from this race.
2017-05-19 14:21:27 -07:00
bin issue-586: detect main executable even if PIE is active 2017-04-03 19:02:51 -07:00
build-aux Update config.{guess,sub} from upstream. 2016-11-10 15:02:05 -08:00
doc Refactor *decay_time into *decay_ms. 2017-05-18 11:33:45 -07:00
include Protect the rtree/extent interactions with a mutex pool. 2017-05-19 14:21:27 -07:00
m4 jemalloc cpp new/delete bindings 2016-12-12 18:36:06 -08:00
msvc Make VS2015 project work again 2017-05-02 08:20:29 -07:00
scripts Specify -Werror for run_tests builds. 2017-05-11 22:11:35 -07:00
src Protect the rtree/extent interactions with a mutex pool. 2017-05-19 14:21:27 -07:00
test Protect the rtree/extent interactions with a mutex pool. 2017-05-19 14:21:27 -07:00
.appveyor.yml Do not build in parallel on AppVeyor. 2017-05-11 23:06:54 -07:00
.autom4te.cfg Disable autom4te cache. 2014-09-02 17:49:29 -07:00
.gitattributes fix git handling of newlines on windows 2014-05-07 18:48:39 -04:00
.gitignore Avoid over-rebuilding due to namespace mangling. 2017-05-17 10:06:58 -07:00
.travis.yml Remove --disable-tcache. 2017-04-21 10:06:12 -07:00
autogen.sh Move repo contents in jemalloc/ to top level. 2011-03-31 20:36:17 -07:00
ChangeLog Fix typos. 2017-03-01 15:31:30 -08:00
config.stamp.in Move repo contents in jemalloc/ to top level. 2011-03-31 20:36:17 -07:00
configure.ac Automatically generate private symbol name mangling macros. 2017-05-11 23:06:54 -07:00
COPYING Update copyright dates for 2016. 2016-02-28 15:20:40 -08:00
INSTALL.md Refactor *decay_time into *decay_ms. 2017-05-18 11:33:45 -07:00
jemalloc.pc.in Update project URL. 2016-09-12 11:56:24 -07:00
Makefile.in Protect the rtree/extent interactions with a mutex pool. 2017-05-19 14:21:27 -07:00
README Update project URL. 2016-09-12 11:56:24 -07:00
run_tests.sh Introduce scripts to run all possible tests 2017-01-30 17:51:57 -08:00

jemalloc is a general purpose malloc(3) implementation that emphasizes
fragmentation avoidance and scalable concurrency support.  jemalloc first came
into use as the FreeBSD libc allocator in 2005, and since then it has found its
way into numerous applications that rely on its predictable behavior.  In 2010
jemalloc development efforts broadened to include developer support features
such as heap profiling and extensive monitoring/tuning hooks.  Modern jemalloc
releases continue to be integrated back into FreeBSD, and therefore versatility
remains critical.  Ongoing development efforts trend toward making jemalloc
among the best allocators for a broad range of demanding applications, and
eliminating/mitigating weaknesses that have practical repercussions for real
world applications.

The COPYING file contains copyright and licensing information.

The INSTALL file contains information on how to configure, build, and install
jemalloc.

The ChangeLog file contains a brief summary of changes for each release.

URL: http://jemalloc.net/