* 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.
This commit is contained in:
Christopher Faylor
2002-10-09 05:55:40 +00:00
parent 7da53596cf
commit c4ec64d76b
8 changed files with 63 additions and 27 deletions

View File

@@ -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);