cosmopolitan/third_party/nsync
Justine Tunney c3440d040c
Make improvements
- More timspec_*() and timeval_*() APIs have been introduced.
- The copyfd() function is now simplified thanks to POSIX rules.
- More Cosmo-specific APIs have been moved behind the COSMO define.
- The setitimer() polyfill for Windows NT is now much higher quality.
- Fixed build error for MODE=aarch64 due to -mstringop-strategy=loop.
- This change introduces `make MODE=nox87 toolchain` which makes it
  possible to build programs using your cosmocc toolchain that don't
  have legacy fpu instructions. This is useful, for example, if you
  want to have a ~22kb tinier blink virtual machine.
2023-06-15 14:50:53 -07:00
..
mem Get --ftrace working on aarch64 2023-06-05 23:35:31 -07:00
testing Make improvements 2022-11-07 02:26:06 -08:00
array.internal.h Clean up some sleep code 2022-10-08 03:00:48 -07:00
atomic.h Validate privileged code relationships 2023-06-08 04:38:06 -07:00
atomic.internal.h Add shared memory apis to redbean 2022-10-06 04:55:26 -07:00
common.c Implement pthread_atfork() 2022-10-16 12:25:13 -07:00
common.internal.h Implement pthread_atfork() 2022-10-16 12:25:13 -07:00
compat.S Make improvements 2023-06-15 14:50:53 -07:00
counter.h Use *NSYNC for POSIX threads locking APIs 2022-09-11 11:04:50 -07:00
cv.h Improve cancellations, randomness, and time 2022-11-05 23:45:32 -07:00
debug.h Use *NSYNC for POSIX threads locking APIs 2022-09-11 11:04:50 -07:00
dll.c Use *NSYNC for POSIX threads locking APIs 2022-09-11 11:04:50 -07:00
dll.h Use *NSYNC for POSIX threads locking APIs 2022-09-11 11:04:50 -07:00
futex.c Make improvements 2023-06-15 14:50:53 -07:00
futex.internal.h Make improvements 2022-11-07 02:26:06 -08:00
heap.internal.h Clean up some sleep code 2022-10-08 03:00:48 -07:00
LICENSE.txt Use *NSYNC for POSIX threads locking APIs 2022-09-11 11:04:50 -07:00
mu.c Make futexes cancellable by pthreads 2022-11-04 18:36:34 -07:00
mu.h Pay off more technical debt 2022-09-12 23:36:56 -07:00
mu_semaphore.c Get threads working well on MacOS Arm64 2023-06-04 01:57:10 -07:00
mu_semaphore.h Make futexes cancellable by pthreads 2022-11-04 18:36:34 -07:00
mu_semaphore.internal.h Get threads working well on MacOS Arm64 2023-06-04 01:57:10 -07:00
mu_semaphore_futex.c Get threads working well on MacOS Arm64 2023-06-04 01:57:10 -07:00
mu_semaphore_gcd.c Get threads working well on MacOS Arm64 2023-06-04 01:57:10 -07:00
mu_semaphore_sem.c Get threads working well on MacOS Arm64 2023-06-04 01:57:10 -07:00
mu_wait.h Use *NSYNC for POSIX threads locking APIs 2022-09-11 11:04:50 -07:00
note.h Use *NSYNC for POSIX threads locking APIs 2022-09-11 11:04:50 -07:00
nsync.mk Get --ftrace working on aarch64 2023-06-05 23:35:31 -07:00
once.h Use *NSYNC for POSIX threads locking APIs 2022-09-11 11:04:50 -07:00
panic.c Make improvements 2022-11-10 21:52:47 -08:00
races.internal.h Add *NSYNC mu_test 2022-09-11 18:56:29 -07:00
README.cosmo Improve cancellations, randomness, and time 2022-11-05 23:45:32 -07:00
README.md Add *NSYNC to libc/isystem 2022-09-13 01:47:12 -07:00
time.h Improve cancellations, randomness, and time 2022-11-05 23:45:32 -07:00
wait_s.internal.h Add *NSYNC unit test suite 2022-10-07 21:34:15 -07:00
waiter.h Use *NSYNC for POSIX threads locking APIs 2022-09-11 11:04:50 -07:00
waiter_per_thread.c Use *NSYNC for POSIX threads locking APIs 2022-09-11 11:04:50 -07:00
yield.c Make improvements 2022-11-07 02:26:06 -08:00

*NSYNC

*NSYNC is a library providing scalable synchronization primitives. The following packages are provided:

  • THIRD_PARTY_NSYNC has nsync_mu which doesn't depend on malloc().
  • THIRD_PARTY_NSYNC_MEM has 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_() so malloc() 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.