diff options
author | Christopher Faylor <me@cgf.cx> | 2004-03-15 02:47:35 +0000 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2004-03-15 02:47:35 +0000 |
commit | 168d7785fc2c13bca530c20b2015042903484b48 (patch) | |
tree | eb6a14a747fbb5468409133b4f34b4162ea645c1 /winsup/cygwin/sigproc.cc | |
parent | 6644f5097cdadf7e1747a7d23418e4ba8d03e350 (diff) | |
download | cygnal-168d7785fc2c13bca530c20b2015042903484b48.tar.gz cygnal-168d7785fc2c13bca530c20b2015042903484b48.tar.bz2 cygnal-168d7785fc2c13bca530c20b2015042903484b48.zip |
* cygtls.cc (_cygtls::remove): Call remove_wq even when we can't necessarily
get the cygtls table lock.
* cygtls.h (_cygtls::remove_wq): Add wait argument.
* sigproc.cc (_cygtls::remove_wq): Honor wait argument when acquiring lock.
(proc_terminate): Don't NULL sync_proc_subproc since other threads may still
try to access it.
Diffstat (limited to 'winsup/cygwin/sigproc.cc')
-rw-r--r-- | winsup/cygwin/sigproc.cc | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/winsup/cygwin/sigproc.cc b/winsup/cygwin/sigproc.cc index 30318a7e1..c786153a6 100644 --- a/winsup/cygwin/sigproc.cc +++ b/winsup/cygwin/sigproc.cc @@ -471,17 +471,19 @@ out1: // FIXME: This is inelegant void -_cygtls::remove_wq () +_cygtls::remove_wq (DWORD wait) { - 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 (); + if (sync_proc_subproc && sync_proc_subproc->acquire (wait)) + { + 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. @@ -536,7 +538,6 @@ proc_terminate (void) pchildren[i].release (); } nchildren = nzombies = 0; - sync_proc_subproc = NULL; } sigproc_printf ("leaving"); } |