Cygwin: pty: Additional fix for transferring input at exit.

The commit 3456e8b7db does not fix transferring input at exit
appropriately. If the more than one non-cygwin apps are executed
simultaneously and one of them is terminated, the pty master failed
to send input to the other non-cygwin apps. This patch fixes that.

Fixes: 3456e8b7db ("Cygwin: pty: Fix transferring type-ahead input between input pipes.")
Signed-off-by: Takashi Yano <takashi.yano@nifty.ne.jp>
This commit is contained in:
Takashi Yano 2023-06-02 10:19:18 +09:00
parent 3456e8b7db
commit b553457f68
1 changed files with 8 additions and 2 deletions

View File

@ -4128,7 +4128,14 @@ fhandler_pty_slave::cleanup_for_non_cygwin_app (handle_set_t *p, tty *ttyp,
DWORD force_switch_to) DWORD force_switch_to)
{ {
ttyp->wait_fwd (); ttyp->wait_fwd ();
if ((ttyp->pcon_activated || stdin_is_ptys) DWORD current_pid = myself->exec_dwProcessId ?: myself->dwProcessId;
DWORD switch_to = force_switch_to;
WaitForSingleObject (p->pipe_sw_mutex, INFINITE);
if (!switch_to)
switch_to = get_console_process_id (current_pid, false, true, true);
if (!switch_to)
switch_to = get_console_process_id (current_pid, false, true, false);
if ((!switch_to && (ttyp->pcon_activated || stdin_is_ptys))
&& ttyp->pty_input_state_eq (tty::to_nat)) && ttyp->pty_input_state_eq (tty::to_nat))
{ {
WaitForSingleObject (p->input_mutex, mutex_timeout); WaitForSingleObject (p->input_mutex, mutex_timeout);
@ -4138,7 +4145,6 @@ fhandler_pty_slave::cleanup_for_non_cygwin_app (handle_set_t *p, tty *ttyp,
release_attach_mutex (); release_attach_mutex ();
ReleaseMutex (p->input_mutex); ReleaseMutex (p->input_mutex);
} }
WaitForSingleObject (p->pipe_sw_mutex, INFINITE);
if (ttyp->pcon_activated) if (ttyp->pcon_activated)
close_pseudoconsole (ttyp, force_switch_to); close_pseudoconsole (ttyp, force_switch_to);
else else