OSDN Git Service

* fhandler.h (fhandler_tty_slave::ttyname): Use name from pc since it is
authorcgf <cgf>
Mon, 8 Dec 2003 06:27:04 +0000 (06:27 +0000)
committercgf <cgf>
Mon, 8 Dec 2003 06:27:04 +0000 (06:27 +0000)
guaranteed to be accurate.
* fhandler_tty.cc (fhandler_tty_slave::open): Increment open_fhs appropriate
when copying ctty.
(fhandler_tty_slave::close): Remove special case handling for exit_state.  Use
ctty < 0 check instead.
(fhandler_tty_common::close): Set io_handle to NULL after closing.
* syscalls.cc (close_all_files): Specifically close cygheap->ctty, if
appropriate.

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

index fb38a82..63904fa 100644 (file)
@@ -1,3 +1,15 @@
+2003-12-08  Christopher Faylor  <cgf@redhat.com>
+
+       * fhandler.h (fhandler_tty_slave::ttyname): Use name from pc since it
+       is guaranteed to be accurate.
+       * fhandler_tty.cc (fhandler_tty_slave::open): Increment open_fhs
+       appropriate when copying ctty.
+       (fhandler_tty_slave::close): Remove special case handling for
+       exit_state.  Use ctty < 0 check instead.
+       (fhandler_tty_common::close): Set io_handle to NULL after closing.
+       * syscalls.cc (close_all_files): Specifically close cygheap->ctty, if
+       appropriate.
+
 2003-12-07  Christopher Faylor  <cgf@redhat.com>
 
        * spawn.cc (spawn_guts): Change type back to 'int' after erroneous
index d9212fe..6014325 100644 (file)
@@ -919,6 +919,7 @@ class fhandler_tty_slave: public fhandler_tty_common
   select_record *select_read (select_record *s);
   int cygserver_attach_tty (HANDLE*, HANDLE*);
   int get_unit () __attribute__ ((regparm (1)));
+  virtual char const *ttyname () { return pc.dev.name; }
 };
 
 class fhandler_pty_master: public fhandler_tty_common
index c5718a3..3cea6b9 100644 (file)
@@ -454,6 +454,7 @@ fhandler_tty_slave::open (int flags, mode_t)
   else
     {
       *this = cygheap->ctty;
+      fhandler_console::open_fhs++;
       termios_printf ("copied tty fhandler from cygheap");
       return 1;
     }
@@ -601,7 +602,7 @@ fhandler_tty_slave::close ()
   if (!--fhandler_console::open_fhs && myself->ctty == -1)
     FreeConsole ();
   termios_printf ("decremented open_fhs %d", fhandler_console::open_fhs);
-  if (!exit_state && get_io_handle () == cygheap->ctty.get_io_handle ())
+  if (myself->ctty >= 0 && get_io_handle () == cygheap->ctty.get_io_handle ())
     return 1;
   return fhandler_tty_common::close ();
 }
@@ -1173,6 +1174,8 @@ fhandler_tty_common::close ()
   if (!ForceCloseHandle1 (get_output_handle (), to_pty))
     termios_printf ("CloseHandle (get_output_handle ()<%p>), %E", get_output_handle ());
 
+  set_io_handle (NULL);
+
   inuse = NULL;
   termios_printf ("tty%d <%p,%p> closed", get_unit (), get_handle (), get_output_handle ());
   return 0;
index c857ed4..268c34f 100644 (file)
@@ -97,6 +97,12 @@ close_all_files (void)
        cygheap->fdtab.release (i);
       }
 
+  if (cygheap->ctty.get_io_handle ())
+    {
+      myself->ctty = -1;
+      cygheap->ctty.close ();
+    }
+
   ReleaseResourceLock (LOCK_FD_LIST, WRITE_LOCK | READ_LOCK, "close_all_files");
   user_shared->delqueue.process_queue ();
 }