mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-10-27 11:26:43 +00:00
We torture test dlmalloc() in test/libc/stdio/memory_test.c. That test was crashing on occasion on Apple M1 microprocessors when dlmalloc was using *NSYNC locks. It was relatively easy to spot the cause, which is this one particular compare and swap operation, which needed to change to use sequentially-consistent ordering rather than an acquire barrier |
||
|---|---|---|
| .. | ||
| mem | ||
| testing | ||
| array.internal.h | ||
| atomic.h | ||
| atomic.internal.h | ||
| common.c | ||
| common.internal.h | ||
| compat.S | ||
| counter.h | ||
| cv.h | ||
| debug.h | ||
| futex.c | ||
| futex.internal.h | ||
| heap.internal.h | ||
| LICENSE.txt | ||
| mu.c | ||
| mu.h | ||
| mu_semaphore.c | ||
| mu_semaphore.h | ||
| mu_semaphore.internal.h | ||
| mu_semaphore_futex.c | ||
| mu_semaphore_gcd.c | ||
| mu_semaphore_sem.c | ||
| mu_wait.h | ||
| note.h | ||
| nsync.mk | ||
| once.h | ||
| panic.c | ||
| races.internal.h | ||
| README.cosmo | ||
| README.md | ||
| time.h | ||
| wait_s.internal.h | ||
| waiter.h | ||
| yield.c | ||
*NSYNC
*NSYNC is a library providing scalable synchronization primitives. The following packages are provided:
THIRD_PARTY_NSYNChasnsync_muwhich doesn't depend on malloc().THIRD_PARTY_NSYNC_MEMhas the rest of *NSYNC, e.g.nsync_cv.
The origin of this code is here:
git@github.com:google/nsync
ac5489682760393fe21bd2a8e038b528442412a7 (1.25.0)
Author: Mike Burrows <m3b@google.com>
Date: Wed Jun 1 16:47:52 2022 -0700
NSYNC uses the Apache 2.0 license. We made the following local changes:
-
Write custom
nsync_malloc_()somalloc()can use *NSYNC. -
Rewrite
futex()wrapper to support old Linux kernels and OpenBSD. -
Normalize sources to Cosmopolitan style conventions; *NSYNC upstream supports dozens of compilers and operating systems, at compile-time. Since Cosmo solves portability at runtime instead, most of the build config toil has been removed, in order to help the NSYNC source code be more readable and hackable.