OSDN Git Service

* dcrt0.cc (do_exit): Don't set thread termination until all fds have been
authorcgf <cgf>
Sun, 24 Oct 2010 18:50:56 +0000 (18:50 +0000)
committercgf <cgf>
Sun, 24 Oct 2010 18:50:56 +0000 (18:50 +0000)
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.

winsup/cygwin/ChangeLog
winsup/cygwin/dcrt0.cc
winsup/cygwin/fhandler_tty.cc
winsup/cygwin/globals.cc
winsup/cygwin/path.cc

index 554d14f..42b1a88 100644 (file)
@@ -1,5 +1,16 @@
 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>
+
        * exceptions.cc (try_to_debug): Improve comment.
        * fhandler_tty.cc (fhandler_pty_master::fhandler_pty_master): Add a
        comment.
index 13dc33d..4aca474 100644 (file)
@@ -1054,13 +1054,6 @@ do_exit (int status)
       events_terminate ();
     }
 
-  UINT n = (UINT) status;
-  if (exit_state < ES_THREADTERM)
-    {
-      exit_state = ES_THREADTERM;
-      cygthread::terminate ();
-    }
-
   if (exit_state < ES_SIGNAL)
     {
       exit_state = ES_SIGNAL;
@@ -1076,6 +1069,13 @@ do_exit (int status)
       close_all_files ();
     }
 
+  UINT n = (UINT) status;
+  if (exit_state < ES_THREADTERM)
+    {
+      exit_state = ES_THREADTERM;
+      cygthread::terminate ();
+    }
+
   myself->stopsig = 0;
 
   if (exit_state < ES_HUP_PGRP)
index 56ef280..4ef3457 100644 (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
    we have to trust the client side.
 
-   Since there's
-   always only one pipe instance, there's a chance that clients have to
-   wait to connect to the master control pipe.  Therefore the client calls
-   to CallNamedPipe should have a big enough timeout value.  For now this
+   Since there's always only one pipe instance, there's a chance that clients
+   have to wait to connect to the master control pipe.  Therefore the client
+   calls to CallNamedPipe should have a big enough timeout value.  For now this
    is 500ms.  Hope that's enough. */
 
 DWORD
@@ -1635,7 +1634,7 @@ fhandler_pty_master::pty_master_thread ()
   DWORD pid;
 
   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 };
       bool deimp = false;
index 811192d..801ae74 100644 (file)
@@ -35,9 +35,9 @@ enum exit_states
     ES_EXIT_STARTING,
     ES_PROCESS_LOCKED,
     ES_EVENTS_TERMINATE,
-    ES_THREADTERM,
     ES_SIGNAL,
     ES_CLOSEALL,
+    ES_THREADTERM,
     ES_HUP_PGRP,
     ES_HUP_SID,
     ES_EXEC_EXIT,
index 4685701..ebd613e 100644 (file)
@@ -3477,9 +3477,6 @@ find_fast_cwd_pointers ()
   if (movesi[0] != 0x8b)
     return;
   fast_cwd_ptr = (PFAST_CWD *) peek32 (movesi + 2);
-#ifdef DEBUGGING
-  system_printf ("fast_cwd_ptr: %p", fast_cwd_ptr);
-#endif
 }
 
 static inline void