From c4ec64d76b9650b92d4c9f566fbac788c2d3fd46 Mon Sep 17 00:00:00 2001 From: Christopher Faylor Date: Wed, 9 Oct 2002 05:55:40 +0000 Subject: * 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. --- winsup/cygwin/sigproc.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'winsup/cygwin/sigproc.cc') diff --git a/winsup/cygwin/sigproc.cc b/winsup/cygwin/sigproc.cc index 091065241..8cc459c1c 100644 --- a/winsup/cygwin/sigproc.cc +++ b/winsup/cygwin/sigproc.cc @@ -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" { -- cgit v1.2.3