summaryrefslogtreecommitdiff
path: root/src/process/fork.c
AgeCommit message (Collapse)AuthorLines
2013-08-08block signals during forkRich Felker-0/+3
there are several reasons for this. some of them are related to race conditions that arise since fork is required to be async-signal-safe: if fork or pthread_create is called from a signal handler after the fork syscall has returned but before the subsequent userspace code has finished, inconsistent state could result. also, there seem to be kernel and/or strace bugs related to arrival of signals during fork, at least on some versions, and simply blocking signals eliminates the possibility of such bugs.
2012-11-08clean up sloppy nested inclusion from pthread_impl.hRich Felker-0/+1
this mirrors the stdio_impl.h cleanup. one header which is not strictly needed, errno.h, is left in pthread_impl.h, because since pthread functions return their error codes rather than using errno, nearly every single pthread function needs the errno constants. in a few places, rather than bringing in string.h to use memset, the memset was replaced by direct assignment. this seems to generate much better code anyway, and makes many functions which were previously non-leaf functions into leaf functions (possibly eliminating a great deal of bloat on some platforms where non-leaf functions require ugly prologue and/or epilogue).
2011-08-06use weak aliases rather than function pointers to simplify some codeRich Felker-2/+8
2011-07-16ensure in fork that child gets its own new robust mutex listRich Felker-0/+1
2011-04-20fix minor bugs due to incorrect threaded-predicate semanticsRich Felker-1/+2
some functions that should have been testing whether pthread_self() had been called and initialized the thread pointer were instead testing whether pthread_create() had been called and actually made the program "threaded". while it's unlikely any mismatch would occur in real-world problems, this could have introduced subtle bugs. now, we store the address of the main thread's thread descriptor in the libc structure and use its presence as a flag that the thread register is initialized. note that after fork, the calling thread (not necessarily the original main thread) is the new main thread.
2011-04-17clean up handling of thread/nothread mode, lockingRich Felker-1/+1
2011-04-12speed up threaded forkRich Felker-2/+1
after fork, we have a new process and the pid is equal to the tid of the new main thread. there is no need to make two separate syscalls to obtain the same number.
2011-03-20global cleanup to use the new syscall interfaceRich Felker-3/+3
2011-03-09make fork properly initialize the main thread in the child processRich Felker-0/+7
2011-02-18add pthread_atfork interfaceRich Felker-3/+6
note that this presently does not handle consistency of the libc's own global state during forking. as per POSIX 2008, if the parent process was threaded, the child process may only call async-signal-safe functions until one of the exec-family functions is called, so the current behavior is believed to be conformant even if non-ideal. it may be improved at some later time.
2011-02-12initial check-in, version 0.5.0v0.5.0Rich Felker-0/+9