OSDN Git Service

* fhandler.h (fhandler_console::fixup_after_fork_exec): Declare new function.
authorcgf <cgf>
Mon, 14 Nov 2005 05:36:16 +0000 (05:36 +0000)
committercgf <cgf>
Mon, 14 Nov 2005 05:36:16 +0000 (05:36 +0000)
(fhandler_console::fixup_after_fork): Use fixup_after_fork_exec.
(fhandler_console::fixup_after_exec): Ditto.
* fhandler_console.cc (fhandler_console::fixup_after_fork): Delete definition.
(fhandler_console::fixup_after_fork_exec): Rename from fixup_after_exec.
* pinfo.cc (_pinfo::set_ctty): Don't play with console count here.
* syscalls.cc (close_all_files): Don't close cygheap ctty if hExeced since the
child will be copying information from us.
(setsid): Use myctty() rather than raw ctty #.

winsup/cygwin/ChangeLog
winsup/cygwin/fhandler.h
winsup/cygwin/fhandler_console.cc
winsup/cygwin/fhandler_tty.cc
winsup/cygwin/pinfo.cc
winsup/cygwin/syscalls.cc

index 136508f..52d1694 100644 (file)
@@ -1,3 +1,15 @@
+2005-11-14  Christopher Faylor  <cgf@timesys.com>
+
+       * fhandler.h (fhandler_console::fixup_after_fork_exec): Declare new function.
+       (fhandler_console::fixup_after_fork): Use fixup_after_fork_exec.
+       (fhandler_console::fixup_after_exec): Ditto.
+       * fhandler_console.cc (fhandler_console::fixup_after_fork): Delete definition.
+       (fhandler_console::fixup_after_fork_exec): Rename from fixup_after_exec.
+       * pinfo.cc (_pinfo::set_ctty): Don't play with console count here.
+       * syscalls.cc (close_all_files): Don't close cygheap ctty if hExeced
+       since the child will be copying information from us.
+       (setsid): Use myctty() rather than raw ctty #.
+
 2005-11-13  Christopher Faylor  <cgf@timesys.com>
 
        * cygheap.h (init_cygheap::manage_console_count): Declare new function.
index 66ccf1e..3e61f82 100644 (file)
@@ -909,9 +909,10 @@ class fhandler_console: public fhandler_termios
   select_record *select_read (select_record *s);
   select_record *select_write (select_record *s);
   select_record *select_except (select_record *s);
-  void fixup_after_exec ();
+  void fixup_after_fork_exec ();
+  void fixup_after_exec () {fixup_after_fork_exec ();}
+  void fixup_after_fork (HANDLE) {fixup_after_fork_exec ();}
   void set_close_on_exec (bool val);
-  void fixup_after_fork (HANDLE parent);
   void set_input_state ();
   void send_winch_maybe ();
   static tty_min *get_tty_stuff (int);
index a8c73d6..3c812ce 100644 (file)
@@ -695,10 +695,7 @@ fhandler_console::close ()
   return 0;
 }
 
-/*
- * Special console dup to duplicate input and output
- * handles.
- */
+/*  Special console dup to duplicate input and output  handles.  */
 
 int
 fhandler_console::dup (fhandler_base *child)
@@ -1757,29 +1754,6 @@ fhandler_console::set_close_on_exec (bool val)
   set_no_inheritance (output_handle, val);
 }
 
-void
-fhandler_console::fixup_after_fork (HANDLE)
-{
-  HANDLE h = get_handle ();
-  HANDLE oh = get_output_handle ();
-
-  /* Windows does not allow duplication of console handles between processes
-     so open the console explicitly. */
-
-  if (!open (O_NOCTTY | get_flags (), 0))
-    system_printf ("error opening console after fork, %E");
-
-  /* Need to decrement console_count since this open is basically a no-op to reopen
-     the console and we've already recorded that fact. */
-  cygheap->manage_console_count ("fhandler_console::fixup_after_fork", -1);
-
-  if (!close_on_exec ())
-    {
-      CloseHandle (h);
-      CloseHandle (oh);
-    }
-}
-
 void __stdcall
 set_console_title (char *title)
 {
@@ -1795,29 +1769,29 @@ set_console_title (char *title)
 }
 
 void
-fhandler_console::fixup_after_exec ()
+fhandler_console::fixup_after_fork_exec ()
 {
   HANDLE h = get_handle ();
   HANDLE oh = get_output_handle ();
 
   if (close_on_exec () || open (O_NOCTTY | get_flags (), 0))
-    cygheap->manage_console_count ("fhandler_console::fixup_after_exec", -1);
+    cygheap->manage_console_count ("fhandler_console::fixup_after_fork_exec", -1);
   else
     {
       bool sawerr = false;
       if (!get_io_handle ())
        {
-         system_printf ("error opening input console handle after exec, errno %d, %E", get_errno ());
+         system_printf ("error opening input console handle after fork/exec, errno %d, %E", get_errno ());
          sawerr = true;
        }
       if (!get_output_handle ())
        {
-         system_printf ("error opening output console handle after exec, errno %d, %E", get_errno ());
+         system_printf ("error opening output console handle after fork/exec, errno %d, %E", get_errno ());
          sawerr = true;
        }
 
       if (!sawerr)
-       system_printf ("error opening console after exec, errno %d, %E", get_errno ());
+       system_printf ("error opening console after fork/exec, errno %d, %E", get_errno ());
     }
 
   if (!close_on_exec ())
index 0afc1a0..3bf524e 100644 (file)
@@ -450,8 +450,7 @@ fhandler_tty_slave::open (int flags, mode_t)
 {
   if (get_device () == FH_TTY)
     pc.dev.tty_to_real_device ();
-  fhandler_tty_slave *arch = (fhandler_tty_slave *)
-    cygheap->fdtab.find_archetype (pc.dev);
+  fhandler_tty_slave *arch = (fhandler_tty_slave *) cygheap->fdtab.find_archetype (pc.dev);
   if (arch)
     {
       *this = *(fhandler_tty_slave *) arch;
index 7350a00..6610919 100644 (file)
@@ -365,7 +365,6 @@ _pinfo::set_ctty (tty_min *tc, int flags, fhandler_tty_slave *arch)
          if (arch)
            {
              arch->usecount++;
-             cygheap->manage_console_count ("pinfo::set_ctty", 1);
              report_tty_counts (cygheap->ctty, "ctty", "");
            }
        }
index 2a425ed..7f941df 100644 (file)
@@ -114,7 +114,7 @@ close_all_files (bool norelease)
          cygheap->fdtab.release (i);
       }
 
-  if (cygheap->ctty)
+  if (!hExeced && cygheap->ctty)
     cygheap->close_ctty ();
 
   cygheap->fdtab.unlock ();
@@ -347,8 +347,7 @@ setsid (void)
       myself->pgid = getpid ();
       if (cygheap->ctty)
        cygheap->close_ctty ();
-      syscall_printf ("sid %d, pgid %d, ctty %d", myself->sid, myself->pgid,
-                     myself->ctty);
+      syscall_printf ("sid %d, pgid %d, %s", myself->sid, myself->pgid, myctty ());
       return myself->sid;
     }