* 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:
@ -458,7 +458,6 @@ proc_terminate (void)
|
||||
{
|
||||
proc_loop_wait = 0; // Tell wait_subproc thread to exit
|
||||
wake_wait_subproc (); // Wake wait_subproc loop
|
||||
hwait_subproc->detach ();
|
||||
hwait_subproc = NULL;
|
||||
|
||||
sync_proc_subproc->acquire (WPSP);
|
||||
@ -568,6 +567,7 @@ sigproc_init ()
|
||||
ProtectHandle (signal_arrived);
|
||||
|
||||
hwait_sig = new cygthread (wait_sig, cygself, "sig");
|
||||
hwait_sig->zap_h ();
|
||||
|
||||
/* sync_proc_subproc is used by proc_subproc. It serialises
|
||||
* access to the children and zombie arrays.
|
||||
@ -1030,7 +1030,7 @@ static DWORD WINAPI
|
||||
wait_sig (VOID *self)
|
||||
{
|
||||
/* Initialization */
|
||||
(void) SetThreadPriority (*((cygthread *) self), WAIT_SIG_PRIORITY);
|
||||
(void) SetThreadPriority (GetCurrentThread (), WAIT_SIG_PRIORITY);
|
||||
|
||||
/* sigcatch_nosync - semaphore incremented by sig_dispatch_pending and
|
||||
* by foreign processes to force an examination of
|
||||
@ -1193,7 +1193,7 @@ wait_sig (VOID *self)
|
||||
}
|
||||
|
||||
sigproc_printf ("done");
|
||||
return 0;
|
||||
ExitThread (0);
|
||||
}
|
||||
|
||||
/* Wait for subprocesses to terminate. Executes in a separate thread. */
|
||||
@ -1267,7 +1267,7 @@ wait_subproc (VOID *)
|
||||
ForceCloseHandle (events[0]);
|
||||
events[0] = NULL;
|
||||
sigproc_printf ("done");
|
||||
return 0;
|
||||
ExitThread (0);
|
||||
}
|
||||
|
||||
extern "C" {
|
||||
|
Reference in New Issue
Block a user