libc and pthreads - Fix atfork issues with nmalloc, update dmalloc

Operating Systems / DragonFlyBSD - Matthew Dillon [apollo.backplane.com] - 8 November 2017 18:56 EST

- Implement atfork handling for nmalloc. As part of this, refactor some of nmalloc.

- Remove ZERO_LENGTH_PTR from nmalloc. Instead, force 0-byte allocations to allocate 1 byte. The standard requires unique pointers to be returned.

- For now go back to a single depot lock instead of a per-zone lock. It is unclear whether multi-threaded performance will suffer or not, but its the only way to implement atfork handling.

- Implement proper atfork interlocks for nmalloc via pthreads to avoid corruption when heavily threaded programs call fork().

- Bring dmalloc up to date in various ways, including properly implementing a minimum 16-byte alignment for allocations >= 16 bytes, and atfork handling. Also use a global depot lock for the same reason we use it in nmalloc, and implement a front-end magazine shortcut for any allocations <= 2MB.

e2caf0e77d libc and pthreads - Fix atfork issues with nmalloc, update dmalloc
lib/libc/include/libc_private.h | 3 +
lib/libc/stdlib/Symbol.map | 3 +
lib/libc/stdlib/dmalloc.c | 365 ++++++++++++++++++++++++----------
lib/libc/stdlib/nmalloc.c | 62 ++++--
lib/libthread_xu/thread/Makefile.inc | 1 +
lib/libthread_xu/thread/thr_init.c | 1 +
lib/libthread_xu/thread/thr_malloc.c | 54 +++++
lib/libthread_xu/thread/thr_private.h | 1 +
8 files changed, 368 insertions(+), 122 deletions(-)

Upstream: gitweb.dragonflybsd.org


  • Share