* 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:
@@ -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);
|
||||
|
Reference in New Issue
Block a user