summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTakashi Yano via Cygwin-patches <cygwin-patches@cygwin.com>2020-05-19 19:55:23 +0900
committerCorinna Vinschen <corinna@vinschen.de>2020-05-19 15:27:31 +0200
commit7659ff0f5afd751f42485f2684c799c5f37b0fb9 (patch)
tree192ce59189a3def06cfb4965013ee0abbb4193a8
parent0f785536f3cee6168c9e16c619d045488f1eb548 (diff)
downloadcygnal-7659ff0f5afd751f42485f2684c799c5f37b0fb9.tar.gz
cygnal-7659ff0f5afd751f42485f2684c799c5f37b0fb9.tar.bz2
cygnal-7659ff0f5afd751f42485f2684c799c5f37b0fb9.zip
Cygwin: pty: Call FreeConsole() only if attached to current pty.
- 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.
-rw-r--r--winsup/cygwin/fhandler.h1
-rw-r--r--winsup/cygwin/fhandler_tty.cc28
2 files changed, 14 insertions, 15 deletions
diff --git a/winsup/cygwin/fhandler.h b/winsup/cygwin/fhandler.h
index ae64086df..857f0a4e0 100644
--- a/winsup/cygwin/fhandler.h
+++ b/winsup/cygwin/fhandler.h
@@ -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 */
diff --git a/winsup/cygwin/fhandler_tty.cc b/winsup/cygwin/fhandler_tty.cc
index 8547ec7c4..5a1bcd3ce 100644
--- a/winsup/cygwin/fhandler_tty.cc
+++ b/winsup/cygwin/fhandler_tty.cc
@@ -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 ();
}
}