Cygwin: pty: Call FreeConsole() only if attached to current pty.

- After commit 071b8e0cbd, 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.
This commit is contained in:
Takashi Yano via Cygwin-patches
2020-05-19 19:55:23 +09:00
committed by Corinna Vinschen
parent 0f785536f3
commit 7659ff0f5a
2 changed files with 14 additions and 15 deletions

View 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 ();
}
}