]> sourceware.org Git - newlib-cygwin.git/commitdiff
Cygwin: pty: Call FreeConsole() only if attached to current pty.
authorTakashi Yano via Cygwin-patches <cygwin-patches@cygwin.com>
Tue, 19 May 2020 10:55:23 +0000 (19:55 +0900)
committerCorinna Vinschen <corinna@vinschen.de>
Tue, 19 May 2020 13:27:31 +0000 (15:27 +0200)
- After commit 071b8e0cbd4be33449c12bb0d58f514ed8ef893c, the problem
  reported in https://cygwin.com/pipermail/cygwin/2020-May/244873.html
  occurs. This is due to freeing console device accidentally rather
  than pseudo console. This patch makes sure to call FreeConsole()
  only if the process is attached to the pseudo console of the current
  pty.

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

index ae64086df1d2c8c1c1d3896fdc13a60cfbb3c3a4..857f0a4e092b70971a1a725e7cb08b75e76daf7d 100644 (file)
@@ -2284,6 +2284,7 @@ class fhandler_pty_slave: public fhandler_pty_common
 
   bool try_reattach_pcon ();
   void restore_reattach_pcon ();
+  inline void free_attached_console ();
 
  public:
   /* Constructor */
index 8547ec7c4eba12e3f9d5bfec0511ef0381824dee..5a1bcd3ce00a18d337591000185236130bb4123c 100644 (file)
@@ -180,6 +180,16 @@ set_ishybrid_and_switch_to_pcon (HANDLE h)
     }
 }
 
+inline void
+fhandler_pty_slave::free_attached_console ()
+{
+  if (freeconsole_on_close && get_minor () == pcon_attached_to)
+    {
+      FreeConsole ();
+      pcon_attached_to = -1;
+    }
+}
+
 #define DEF_HOOK(name) static __typeof__ (name) *name##_Orig
 DEF_HOOK (WriteFile);
 DEF_HOOK (WriteConsoleA);
@@ -708,11 +718,7 @@ fhandler_pty_slave::~fhandler_pty_slave ()
   if (!get_ttyp ())
     {
       /* Why comes here? Who clears _tc? */
-      if (freeconsole_on_close)
-       {
-         FreeConsole ();
-         pcon_attached_to = -1;
-       }
+      free_attached_console ();
       return;
     }
   if (get_pseudo_console ())
@@ -739,11 +745,7 @@ fhandler_pty_slave::~fhandler_pty_slave ()
       if (used == 0)
        {
          init_console_handler (false);
-         if (freeconsole_on_close)
-           {
-             FreeConsole ();
-             pcon_attached_to = -1;
-           }
+         free_attached_console ();
        }
     }
 }
@@ -3006,11 +3008,7 @@ fhandler_pty_slave::fixup_after_exec ()
       if (used == 1 /* About to close this tty */)
        {
          init_console_handler (false);
-         if (freeconsole_on_close)
-           {
-             FreeConsole ();
-             pcon_attached_to = -1;
-           }
+         free_attached_console ();
        }
     }
 
This page took 0.040095 seconds and 5 git commands to generate.