From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 119977 invoked by alias); 10 Feb 2020 10:04:56 -0000 Mailing-List: contact cygwin-cvs-help@cygwin.com; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: cygwin-cvs-owner@cygwin.com Received: (qmail 119962 invoked by uid 9078); 10 Feb 2020 10:04:55 -0000 Date: Mon, 10 Feb 2020 10:04:00 -0000 Message-ID: <20200210100455.119961.qmail@sourceware.org> Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Corinna Vinschen To: cygwin-cvs@sourceware.org Subject: [newlib-cygwin] Cygwin: pty: Fix state mismatch caused in mintty. X-Act-Checkin: newlib-cygwin X-Git-Author: Takashi Yano X-Git-Refname: refs/heads/master X-Git-Oldrev: 29431fcb5b14d4c5ac3b3161a076eb1a208349d9 X-Git-Newrev: 2de74af22be0ccf75f094caf48c8beb36a49d8c9 X-SW-Source: 2020-q1/txt/msg00060.txt https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=2de74af22be0ccf75f094caf48c8beb36a49d8c9 commit 2de74af22be0ccf75f094caf48c8beb36a49d8c9 Author: Takashi Yano Date: Sun Feb 9 23:47:30 2020 +0900 Cygwin: pty: Fix state mismatch caused in mintty. - PTY has a bug reported in: https://cygwin.com/ml/cygwin/2020-02/msg00067.html. This is the result of state mismatch between real pseudo console attaching state and state variable. This patch fixes the issue. Diff: --- winsup/cygwin/fhandler_tty.cc | 16 ++++++++++++++-- winsup/cygwin/fork.cc | 2 ++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/winsup/cygwin/fhandler_tty.cc b/winsup/cygwin/fhandler_tty.cc index f2fd680..260776a 100644 --- a/winsup/cygwin/fhandler_tty.cc +++ b/winsup/cygwin/fhandler_tty.cc @@ -65,6 +65,12 @@ static bool isHybrid; static bool do_not_reset_switch_to_pcon; static bool freeconsole_on_close = true; +void +clear_pcon_attached_to (void) +{ + pcon_attached_to = -1; +} + static void set_switch_to_pcon (void) { @@ -727,7 +733,10 @@ fhandler_pty_slave::~fhandler_pty_slave () { init_console_handler (false); if (freeconsole_on_close) - FreeConsole (); + { + FreeConsole (); + pcon_attached_to = -1; + } } } } @@ -2988,7 +2997,10 @@ fhandler_pty_slave::fixup_after_exec () { init_console_handler (false); if (freeconsole_on_close) - FreeConsole (); + { + FreeConsole (); + pcon_attached_to = -1; + } } } diff --git a/winsup/cygwin/fork.cc b/winsup/cygwin/fork.cc index a8f0fb8..691d081 100644 --- a/winsup/cygwin/fork.cc +++ b/winsup/cygwin/fork.cc @@ -161,6 +161,8 @@ frok::child (volatile char * volatile here) } } } + extern void clear_pcon_attached_to (void); /* fhandler_tty.cc */ + clear_pcon_attached_to (); HANDLE& hParent = ch.parent;