* cygtls.cc (_cygtls::remove): Call remove_wq to ensure that wait stuff is

removed from proc_subproc linked list.
* cygtls.h (_cygtls::remove_wq): Declare.
* sigproc.cc (_cygtls::remove_wq): Define.
(proc_subproc): Label event handle appropriately.
* spawn.cc (spawn_guts): Return -1 when wait() fails for spawn types that
require waiting.
This commit is contained in:
Christopher Faylor
2004-03-14 06:34:05 +00:00
parent 8308950ca5
commit f8a8e7a1f6
5 changed files with 30 additions and 2 deletions

View File

@@ -401,7 +401,7 @@ proc_subproc (DWORD what, DWORD val)
{
wval->ev = wval->thread_ev = CreateEvent (&sec_none_nih, TRUE,
FALSE, NULL);
ProtectHandle (wval->ev);
ProtectHandle1 (wval->ev, wq_ev);
}
ResetEvent (wval->ev);
@@ -469,6 +469,21 @@ out1:
return rc;
}
// FIXME: This is inelegant
void
_cygtls::remove_wq ()
{
sync_proc_subproc->acquire ();
for (waitq *w = &waitq_head; w->next != NULL; w = w->next)
if (w->next == &wq)
{
ForceCloseHandle1 (wq.thread_ev, wq_ev);
w->next = wq.next;
break;
}
sync_proc_subproc->release ();
}
/* Terminate the wait_subproc thread.
* Called on process exit.
* Also called by spawn_guts to disassociate any subprocesses from this