Eli Zaretskii <e...@gnu.org> writes: >> From: Mark H Weaver <m...@netris.org> >> Cc: l...@gnu.org (Ludovic Courtès), guile-devel@gnu.org >> Date: Sat, 22 Feb 2014 10:54:16 -0500 >> >> Thanks for working on this, but in a multithreaded program, it's no good >> to change the file descriptors in the main program temporarily before >> spawning, and then restore them afterwards. We'll have to find another >> way of doing this. > > Btw, how does the Posix build work reliably when it forks after > several threads are already running? I don't see any calls to > pthread_atfork or any similar machinery in place. What am I missing?
It's safe to fork a multithreaded program without using pthread_atfork if only async-signal-safe functions are called before the exec. In fact, that's why Andy rewrote 'open-process' in C, as it says in the comment above that function. "If a multi-threaded process calls fork(), the new process shall contain a replica of the calling thread and its entire address space, possibly including the states of mutexes and other resources. Consequently, to avoid errors, the child process may only execute async-signal-safe operations until such time as one of the exec functions is called." http://pubs.opengroup.org/onlinepubs/000095399/functions/fork.html Mark