diff options
author | Christopher Faylor <me@cgf.cx> | 2002-10-09 05:55:40 +0000 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2002-10-09 05:55:40 +0000 |
commit | c4ec64d76b9650b92d4c9f566fbac788c2d3fd46 (patch) | |
tree | 2b29dcff1825894fc9ac805e83546c6f3e0772f2 /winsup/cygwin/dcrt0.cc | |
parent | 7da53596cf1385616721180b48b2159802045d1c (diff) | |
download | cygnal-c4ec64d76b9650b92d4c9f566fbac788c2d3fd46.tar.gz cygnal-c4ec64d76b9650b92d4c9f566fbac788c2d3fd46.tar.bz2 cygnal-c4ec64d76b9650b92d4c9f566fbac788c2d3fd46.zip |
* cygthread.cc (cygthread::stub): Don't create an event for "cygself" threads.
Assume that they exit via an ExitThread call.
* cygthread.h (cygthread::SetThreadPriority): New function.
(cygthread::zap_h): New function.
* dcrt0.cc (do_exit): Move cygthread::terminate earlier and establish
exit_state guard.
* fhandler.h (fhandler_tty_master::output_thread): Delete.
* fhandler_tty.cc (fhandler_tty_master::init): Set priority for threads via
method. Zap handles when done. Don't treat process_output specially.
(process_output): Call ExitThread directly.
(fhandler_tty_master::fixup_after_fork): Don't worry about output_thread.
(fhandler_tty_master::fixup_after_exec): Ditto.
* sigproc.cc (proc_terminate): Don't detach from hwait_subproc. Just let it
exit.
(sigproc_init): Close thread handle after initialization.
(wait_sig): Use GetCurrentThread() as SetThreadPriority call rather than
*event* handle. Call ExitThread directly on termination.
(wait_subproc): Call ExitThread directly on termination.
* tty.cc (tty_list::terminate): Don't attempt t detach from output_thread.
Diffstat (limited to 'winsup/cygwin/dcrt0.cc')
-rw-r--r-- | winsup/cygwin/dcrt0.cc | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/winsup/cygwin/dcrt0.cc b/winsup/cygwin/dcrt0.cc index 4b752cf63..2959c6f08 100644 --- a/winsup/cygwin/dcrt0.cc +++ b/winsup/cygwin/dcrt0.cc @@ -947,9 +947,10 @@ __main (void) enum { - ES_SIGNAL = 1, - ES_CLOSEALL = 2, - ES_SIGPROCTERMINATE = 3 + ES_THREADTERM = 1, + ES_SIGNAL = 2, + ES_CLOSEALL = 3, + ES_SIGPROCTERMINATE = 4 }; extern "C" void __stdcall @@ -962,6 +963,12 @@ do_exit (int status) system_printf ("DisableThreadLibraryCalls (%p) failed, %E", cygwin_hmodule); + if (exit_state < ES_THREADTERM) + { + exit_state = ES_THREADTERM; + cygthread::terminate (); + } + syscall_printf ("do_exit (%d)", n); vfork_save *vf = vfork_storage.val (); @@ -1028,7 +1035,6 @@ do_exit (int status) window_terminate (); events_terminate (); shared_terminate (); - cygthread::terminate (); minimal_printf ("winpid %d, exit %d", GetCurrentProcessId (), n); myself->exit (n); |