mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-02-01 03:53:33 +00:00
60cb435cb4
If threads are being used, then fork() will now acquire and release and runtime locks so that fork() may be safely used from threads. This also makes vfork() thread safe, because pthread mutexes will do nothing when the process is a child of vfork(). More torture tests have been written to confirm this all works like a charm. Additionally: - Invent hexpcpy() api - Rename nsync_malloc_() to kmalloc() - Complete posix named semaphore implementation - Make pthread_create() asynchronous signal safe - Add rm, rmdir, and touch to command interpreter builtins - Invent sigisprecious() and modify sigset functions to use it - Add unit tests for posix_spawn() attributes and fix its bugs One unresolved problem is the reclaiming of *NSYNC waiter memory in the forked child processes, within apps which have threads waiting on locks |
||
---|---|---|
.. | ||
mem | ||
testing | ||
array.internal.h | ||
atomic.h | ||
atomic.internal.h | ||
common.c | ||
common.internal.h | ||
compat.S | ||
counter.h | ||
cv.h | ||
debug.h | ||
dll.c | ||
dll.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_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 | ||
waiter_per_thread.c | ||
yield.c |
*NSYNC
*NSYNC is a library providing scalable synchronization primitives. The following packages are provided:
THIRD_PARTY_NSYNC
hasnsync_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_()
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.