* 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

@ -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" {