Commits


libthread: handle spurious _procsleep wakeups, fix $LIBTHREAD handling


libthread: add pthreadperthread mode and use under ASAN ASAN can't deal with the coroutine stacks. In theory we can call into ASAN runtime to let it know about them, but ASAN still has problems with fork or exit happening from a non-system stack. Bypass all possible problems by just having a full OS thread for each libthread thread. The threads are still cooperatively scheduled within a proc (in thos mode, a group of OS threads). Setting the environment variable LIBTHREAD=pthreadperthread will enable the pthreadperthread mode, as will building with CC9FLAGS='-fsanitize=address' in $PLAN9/config. This solution is much more general than ASAN - for example if you are trying to find all the thread stacks in a reproducible crash you can use pthreadperthread mode with any debugger that knows only about OS threads.


stupid gcc


better exit handling


allow config to override kernel version


sunos fixes


add _procwakeupandunlock to help ease locking contention on Linux 2.4.


restore old plan 9 property that when the last thread exits the main proc, the remaining program ends up in the background and the program appears to have exited.


more freebsd work


remove debugging


better exec handling


shuffle to allow use of execchan in non-pthreads impls


start linux pre-2.6 port


confine pthreads to pthread.c


signal handling, add prototype for pthreadinit