mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-01-31 11:37:35 +00:00
751d20d98d
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
43 lines
1.5 KiB
Text
43 lines
1.5 KiB
Text
DESCRIPTION
|
|
|
|
*NSYNC is a synchronization primitives library.
|
|
|
|
LICENSE
|
|
|
|
Apache 2.0
|
|
|
|
ORIGIN
|
|
|
|
git@github.com:google/nsync
|
|
commit ac5489682760393fe21bd2a8e038b528442412a7
|
|
Author: Mike Burrows <m3b@google.com>
|
|
Date: Wed Jun 1 16:47:52 2022 -0700
|
|
|
|
LOCAL CHANGES
|
|
|
|
- Fix nsync_mu_unlock() on Apple Silicon
|
|
|
|
- Time APIs were so good that they're now in libc
|
|
|
|
- Double linked list API was so good that it's now in libc
|
|
|
|
- Support Apple's ulock futexes which are internal but nicer than GCD
|
|
|
|
- Ensure resources such as POSIX semaphores are are released on fork.
|
|
|
|
- Modified *NSYNC to allocate waiter objects on the stack. We need it
|
|
because we use *NSYNC mutexes to implement POSIX mutexes, which are
|
|
too low-level to safely depend on malloc, or even mmap in our case.
|
|
|
|
- Rewrote most of the semaphore and futex system call support code so
|
|
it works well with Cosmopolitan's fat runtime portability. *NSYNC's
|
|
unit test suite passes on all supported platforms. However the BSDs
|
|
currently appear to be overutilizing CPU time compared with others.
|
|
This appears to be the fault of the OSes rather than *NSYNC / Cosmo
|
|
|
|
- Support POSIX thread cancellation. APIs that wait on condition vars
|
|
are now cancellation points. In PTHREAD_CANCEL_MASKED mode they may
|
|
return ECANCELED. In PTHREAD_CANCEL_DEFERRED mode the POSIX threads
|
|
library will unwind the stack to re-acquire locks and free waiters.
|
|
On the other hand the *NSYNC APIs for mutexes will now safely block
|
|
thread cancellation, but you can still use *NSYNC notes to do that.
|