* cygthread.cc (cygthread::stub): Detect if thread function wants to release
itself here, to avoid a race. (cygthread::release): Clear more stuff. Add a diagnostic for an internal error. * cygthread.h (auto_release): New function. * pinfo.h (pinfo::remember): Add an argument to denote whether child is detached. * fork.cc (fork_parent): Reflect change in arguments to pinfo::remember. * pinfo.cc (_pinfo::exit): Signal exit more forcibly. (proc_waiter): Use cygthread::auto_release to signify that cygthread::stub should release the thread. This should avoid a race. (pinfo::alert_parent): Don't signify an error when wr_proc_pipe == NULL. * sigproc.cc (proc_subproc): Add support for PROC_DETACHED_CHILD. * sigproc.h: Ditto. * spawn.cc (spawn_guts): Specify whether child is detached or not when calling pinfo::remember.
This commit is contained in:
@ -413,7 +413,7 @@ fork_parent (HANDLE& hParent, dll *&first_dll,
|
||||
it in afterwards. This requires more bookkeeping than I like, though,
|
||||
so we'll just do it the easy way. So, terminate any child process if
|
||||
we can't actually record the pid in the internal table. */
|
||||
if (!child.remember ())
|
||||
if (!child.remember (false))
|
||||
{
|
||||
TerminateProcess (pi.hProcess, 1);
|
||||
set_errno (EAGAIN);
|
||||
|
Reference in New Issue
Block a user