* dcrt0.cc (do_exit): Don't set thread termination until all fds have been

closed since an fd may rely on a thread.
* fhandler_tty.cc: Reformat comment.
(fhandler_pty_master::pty_master_thread): Refuse ERROR_PIPE_CONNECTED state as
an error.
* globals.cc (exit_states): Reorder ES_THREADTERM.
* path.cc (find_fast_cwd_pointers): Remove excessively wordy DEBUGGING output.
This commit is contained in:
Christopher Faylor 2010-10-24 18:50:57 +00:00
parent 488ddaced3
commit 5160c5f430
5 changed files with 23 additions and 16 deletions

View File

@ -1,3 +1,14 @@
2010-10-24 Christopher Faylor <me+cygwin@cgf.cx>
* dcrt0.cc (do_exit): Don't set thread termination until all fds have
been closed since an fd may rely on a thread.
* fhandler_tty.cc: Reformat comment.
(fhandler_pty_master::pty_master_thread): Refuse ERROR_PIPE_CONNECTED
state as an error.
* globals.cc (exit_states): Reorder ES_THREADTERM.
* path.cc (find_fast_cwd_pointers): Remove excessively wordy DEBUGGING output.
2010-10-24 Christopher Faylor <me+cygwin@cgf.cx> 2010-10-24 Christopher Faylor <me+cygwin@cgf.cx>
* exceptions.cc (try_to_debug): Improve comment. * exceptions.cc (try_to_debug): Improve comment.

View File

@ -1054,13 +1054,6 @@ do_exit (int status)
events_terminate (); events_terminate ();
} }
UINT n = (UINT) status;
if (exit_state < ES_THREADTERM)
{
exit_state = ES_THREADTERM;
cygthread::terminate ();
}
if (exit_state < ES_SIGNAL) if (exit_state < ES_SIGNAL)
{ {
exit_state = ES_SIGNAL; exit_state = ES_SIGNAL;
@ -1076,6 +1069,13 @@ do_exit (int status)
close_all_files (); close_all_files ();
} }
UINT n = (UINT) status;
if (exit_state < ES_THREADTERM)
{
exit_state = ES_THREADTERM;
cygthread::terminate ();
}
myself->stopsig = 0; myself->stopsig = 0;
if (exit_state < ES_HUP_PGRP) if (exit_state < ES_HUP_PGRP)

View File

@ -1614,10 +1614,9 @@ extern "C" BOOL WINAPI GetNamedPipeClientProcessId (HANDLE, PULONG);
OSes there's no function to check for the PID of the client process so OSes there's no function to check for the PID of the client process so
we have to trust the client side. we have to trust the client side.
Since there's Since there's always only one pipe instance, there's a chance that clients
always only one pipe instance, there's a chance that clients have to have to wait to connect to the master control pipe. Therefore the client
wait to connect to the master control pipe. Therefore the client calls calls to CallNamedPipe should have a big enough timeout value. For now this
to CallNamedPipe should have a big enough timeout value. For now this
is 500ms. Hope that's enough. */ is 500ms. Hope that's enough. */
DWORD DWORD
@ -1635,7 +1634,7 @@ fhandler_pty_master::pty_master_thread ()
DWORD pid; DWORD pid;
termios_printf ("Entered"); termios_printf ("Entered");
while (!exit && ConnectNamedPipe (master_ctl, NULL)) while (!exit && (ConnectNamedPipe (master_ctl, NULL) || GetLastError () == ERROR_PIPE_CONNECTED))
{ {
pipe_reply repl = { NULL, NULL, 0 }; pipe_reply repl = { NULL, NULL, 0 };
bool deimp = false; bool deimp = false;

View File

@ -35,9 +35,9 @@ enum exit_states
ES_EXIT_STARTING, ES_EXIT_STARTING,
ES_PROCESS_LOCKED, ES_PROCESS_LOCKED,
ES_EVENTS_TERMINATE, ES_EVENTS_TERMINATE,
ES_THREADTERM,
ES_SIGNAL, ES_SIGNAL,
ES_CLOSEALL, ES_CLOSEALL,
ES_THREADTERM,
ES_HUP_PGRP, ES_HUP_PGRP,
ES_HUP_SID, ES_HUP_SID,
ES_EXEC_EXIT, ES_EXEC_EXIT,

View File

@ -3477,9 +3477,6 @@ find_fast_cwd_pointers ()
if (movesi[0] != 0x8b) if (movesi[0] != 0x8b)
return; return;
fast_cwd_ptr = (PFAST_CWD *) peek32 (movesi + 2); fast_cwd_ptr = (PFAST_CWD *) peek32 (movesi + 2);
#ifdef DEBUGGING
system_printf ("fast_cwd_ptr: %p", fast_cwd_ptr);
#endif
} }
static inline void static inline void