cosmopolitan/libc/runtime
Justine Tunney 60cb435cb4
Implement pthread_atfork()
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
2022-10-16 12:25:13 -07:00
..
__sigsetjmp_tail.c Improve cosmo's conformance to libc-test 2022-10-10 17:52:41 -07:00
__utmpxname.S Add finger demo to redbean and fix regression 2022-06-23 03:42:05 -07:00
abort.c Add notpossible keyword 2022-09-03 20:35:31 -07:00
arch_prctl.c Rename LINUX to _HOSTLINUX etc. to reduce clashes (#655) 2022-10-10 20:31:25 -07:00
brk.c Implement pthread_atfork() 2022-10-16 12:25:13 -07:00
brk.internal.h Rewrite brk() and sbrk() 2022-10-01 23:11:56 -07:00
buffer.internal.h Pay off more technical debt 2022-09-12 23:36:56 -07:00
clearenv.c Pay off more technical debt 2022-09-12 23:36:56 -07:00
clktck.c Add sys_ prefix to unwrapped system calls 2022-09-13 11:20:35 -07:00
clktck.h Make major improvements to redbean and libraries 2021-04-18 12:34:15 -07:00
clone-linux.S Pay off more technical debt 2022-09-12 23:36:56 -07:00
clone-nt.S Pay off more technical debt 2022-09-12 23:36:56 -07:00
clone-openbsd.S Pay off more technical debt 2022-09-12 23:36:56 -07:00
clone.c Elevate Windows production worthiness 2022-10-13 13:44:41 -07:00
clone.internal.h Pay off more technical debt 2022-09-12 23:36:56 -07:00
closesymboltable.c Reduce makefile dependencies by 10% 2022-06-08 20:01:28 -07:00
cocmd.c Implement pthread_atfork() 2022-10-16 12:25:13 -07:00
cosmo.S Pay off more technical debt 2022-09-12 23:36:56 -07:00
daemon.c Greatly expand system() shell code features 2022-10-11 21:30:31 -07:00
directmap.internal.h Improve signals and memory protection 2022-04-12 22:11:00 -07:00
dlfcn.h Get Fabrice Bellard's JavaScript engine to build 2021-04-09 01:06:57 -07:00
dsohandle.S Introduce --strace flag for system call tracing 2022-03-18 18:07:28 -07:00
e820.internal.h Support malloc() on bare metal 2021-02-24 00:53:24 -08:00
efimain.greg.c Make some foss compatibility improvements 2022-10-14 13:59:34 -07:00
enable_threads.c Implement pthread_atfork() 2022-10-16 12:25:13 -07:00
enable_tls.c Make some foss compatibility improvements 2022-10-14 13:59:34 -07:00
endutent.S Make more compatibility improvements 2022-09-06 07:04:13 -07:00
endutxent.S Make more compatibility improvements 2022-09-06 07:04:13 -07:00
exit.c Fix bugs and make code tinier 2022-10-09 23:21:34 -07:00
exit2.c Support malloc() on bare metal 2021-02-24 00:53:24 -08:00
ezmap.c Fold LIBC_BITS into LIBC_INTRIN 2022-08-11 12:13:18 -07:00
ezmap.internal.h Improve documentation 2020-12-27 07:02:35 -08:00
fegetround.c Get Fabrice Bellard's JavaScript engine to build 2021-04-09 01:06:57 -07:00
fenv.c Get Fabrice Bellard's JavaScript engine to build 2021-04-09 01:06:57 -07:00
fenv.h Improve cosmo's conformance to libc-test 2022-10-10 17:52:41 -07:00
fenv.S Improve cosmo's conformance to libc-test 2022-10-10 17:52:41 -07:00
fesetround.c Fix issues revealed by ECMAScript test262 2021-04-10 17:15:35 -07:00
findcombinary.c Make improvements 2022-04-28 09:57:07 -07:00
finddebugbinary.c Fold LIBC_BITS into LIBC_INTRIN 2022-08-11 12:13:18 -07:00
fltrounds.c Fix issues revealed by ECMAScript test262 2021-04-10 17:15:35 -07:00
fork-nt.c Implement pthread_atfork() 2022-10-16 12:25:13 -07:00
fork.c Implement pthread_atfork() 2022-10-16 12:25:13 -07:00
fpathconf.c Make more compatibility improvements 2022-09-06 12:36:34 -07:00
fpreset.S Clean old .source directive out of asm code 2022-03-18 12:43:21 -07:00
free_s.c Improve locks and signals 2022-04-12 05:20:17 -07:00
ftrace-hook.S Make some systemic improvements 2022-05-18 16:52:36 -07:00
ftraceinit.greg.c Make some systemic improvements 2022-05-18 16:52:36 -07:00
ftracer.c Remove stdio lock macros from amalgamation 2022-09-10 12:03:36 -07:00
getargmax.c Make improvements 2022-04-28 09:57:07 -07:00
getdosargv.c Have execve() escape double quotes in cmd.exe's preferred style 2022-10-02 09:15:46 -07:00
getdosenviron.c Have execve() escape double quotes in cmd.exe's preferred style 2022-10-02 09:15:46 -07:00
getinterpreterexecutablename.c Add sys_ prefix to unwrapped system calls 2022-09-13 11:20:35 -07:00
getlogin.c Add sys_ prefix to unwrapped system calls 2022-09-13 11:20:35 -07:00
getlogin_r.c Add sys_ prefix to unwrapped system calls 2022-09-13 11:20:35 -07:00
getmaxfd.c Reduce Makefile dependencies by 4% 2022-05-23 15:07:01 -07:00
getmemtracksize.c Add malloc logging tool 2022-05-26 23:19:22 -07:00
getpagesize.S Make more improvements to threading support 2022-10-09 00:08:47 -07:00
getresourcelimit.c Reduce makefile dependencies by 10% 2022-06-08 20:01:28 -07:00
getsymbolname.c Improve memory safety 2021-10-13 17:27:13 -07:00
getsymboltable.c Pay off more technical debt 2022-09-12 23:36:56 -07:00
getutent.S Make more compatibility improvements 2022-09-06 07:04:13 -07:00
getutid.S Make more compatibility improvements 2022-09-06 07:04:13 -07:00
getutxent.S Make more compatibility improvements 2022-09-06 07:04:13 -07:00
getutxid.S Make more compatibility improvements 2022-09-06 07:04:13 -07:00
getutxline.S Make more compatibility improvements 2022-09-06 07:04:13 -07:00
grow.c Fix bugs and make code tinier 2022-10-09 23:21:34 -07:00
hook.greg.c Make some foss compatibility improvements 2022-10-14 13:59:34 -07:00
inflate.c Pay off more technical debt 2022-09-12 23:36:56 -07:00
init.S Reduce build graph by another 14 percent 2022-08-17 20:01:21 -07:00
interceptflag.greg.c Improve synchronization 2022-04-15 15:31:55 -07:00
internal.h Clean up the TLS code 2022-09-10 11:49:13 -07:00
isdynamicexecutable.c Fold LIBC_BITS into LIBC_INTRIN 2022-08-11 12:13:18 -07:00
isheap.c Fix some issues and do some code cleanup 2022-05-23 10:15:53 -07:00
ismemtracked.greg.c Make some more fixups 2022-06-12 09:37:17 -07:00
jmpstack.S Improve signals and memory protection 2022-04-12 22:11:00 -07:00
ldso.c Get Fabrice Bellard's JavaScript engine to build 2021-04-09 01:06:57 -07:00
login_tty.c Introduce clock_nanosleep() 2022-10-05 06:37:15 -07:00
mapanon.c Pay off more technical debt 2022-09-12 23:36:56 -07:00
mapelfread.c Change license 2020-12-27 17:18:44 -08:00
mapshared.c Pay off more technical debt 2022-09-12 23:36:56 -07:00
mapstack.c Add phtread_setname_np() and pthread_getname_np() 2022-09-07 19:04:05 -07:00
memtrack.internal.h Implement pthread_atfork() 2022-10-16 12:25:13 -07:00
memtrack64.txt Implement pthread_atfork() 2022-10-16 12:25:13 -07:00
memtracknt.c Pay off more technical debt 2022-09-12 23:36:56 -07:00
metalprintf.greg.c Improve synchronization 2022-04-15 15:31:55 -07:00
metalprintf.internal.h Support malloc() on bare metal 2021-02-24 00:53:24 -08:00
mman.internal.h Show "screen of death" on VGA console upon program crash (#650) 2022-10-06 05:36:15 -07:00
mmap.c Fix bugs and make code tinier 2022-10-09 23:21:34 -07:00
morph.greg.c Make some foss compatibility improvements 2022-10-14 13:59:34 -07:00
mprotect-nt.greg.c Clean up some of the threading code 2022-09-08 12:31:56 -07:00
mprotect.c Fix corner case in Linux stack mappings 2022-10-03 13:43:52 -07:00
mremap.c Fix bugs and make code tinier 2022-10-09 23:21:34 -07:00
msync-nt.c Clean up some of the threading code 2022-09-08 12:31:56 -07:00
msync.c Fix bugs and make code tinier 2022-10-09 23:21:34 -07:00
munmap.c Fix bugs and make code tinier 2022-10-09 23:21:34 -07:00
openexecutable.S Fix Redbean when file is read-only (#365) 2022-03-14 17:13:28 -07:00
opensymboltable.greg.c Pay off more technical debt 2022-09-12 23:36:56 -07:00
pathconf.h Make more compatibility improvements 2022-09-06 12:36:34 -07:00
pc.internal.h Start exploring graphical video modes for VGA console (#637) 2022-10-02 01:50:16 -07:00
peekall.S Add MODE=optlinux build mode (#141) 2021-10-14 19:36:49 -07:00
printargs.c Rewrite brk() and sbrk() 2022-10-01 23:11:56 -07:00
printmaps.c Clean up some of the threading code 2022-09-08 12:31:56 -07:00
progname.S Clean old .source directive out of asm code 2022-03-18 12:43:21 -07:00
runtime.h Make some foss compatibility improvements 2022-10-14 13:59:34 -07:00
runtime.mk Improve pthread_join() 2022-09-16 14:02:06 -07:00
setstack.S Remove more nonstandard stuff from cosmopolitan.h 2021-03-01 00:18:23 -08:00
setutent.S Make more compatibility improvements 2022-09-06 07:04:13 -07:00
setutxent.S Make more compatibility improvements 2022-09-06 07:04:13 -07:00
sigsetjmp.S Improve cosmo's conformance to libc-test 2022-10-10 17:52:41 -07:00
stack.h Optimize memory layout 2022-09-12 04:26:52 -07:00
stackchkfail.c Pay off more technical debt 2022-09-12 23:36:56 -07:00
stackchkfaillocal.c Change license 2020-12-27 17:18:44 -08:00
stackuse.c Fix bugs and make code tinier 2022-10-09 23:21:34 -07:00
straceinit.greg.c Pay off more technical debt 2022-09-12 23:36:56 -07:00
symbolic.h wip on intellisense (again) 2021-02-02 11:14:45 -05:00
symbols.c Pay off more technical debt 2022-09-12 23:36:56 -07:00
symbols.internal.h Fold LIBC_BITS into LIBC_INTRIN 2022-08-11 12:13:18 -07:00
sysconf.c Greatly expand system() shell code features 2022-10-11 21:30:31 -07:00
sysconf.h Greatly expand system() shell code features 2022-10-11 21:30:31 -07:00
untrackmemoryintervals.c Fix bugs and make code tinier 2022-10-09 23:21:34 -07:00
unwind.c Fix libunwind stubs 2022-06-26 05:29:25 -07:00
unwind.h Fix libunwind stubs 2022-06-26 05:29:25 -07:00
updwtmp.S Make more compatibility improvements 2022-09-06 07:04:13 -07:00
updwtmpx.S Make more compatibility improvements 2022-09-06 07:04:13 -07:00
utmp.h Add finger demo to redbean and fix regression 2022-06-23 03:42:05 -07:00
utmpx.h Add finger demo to redbean and fix regression 2022-06-23 03:42:05 -07:00
valist.c Remove plenty of makefile misconfigurations 2022-07-21 09:20:59 -07:00
vfork.S Implement pthread_atfork() 2022-10-16 12:25:13 -07:00
warnifpowersave.c Pay off more technical debt 2022-09-12 23:36:56 -07:00
weakfree.c Pay off more technical debt 2022-09-12 23:36:56 -07:00
winargs.internal.h Add torture test for zipos file descriptors 2022-06-15 16:29:49 -07:00
winmain.greg.c Rename LINUX to _HOSTLINUX etc. to reduce clashes (#655) 2022-10-10 20:31:25 -07:00