Cygwin: pty: Use pinfo() rather than kill() with signal 0.

- PTY code has a problem that tcsh is terminated if the following
  command is executed.
    true; chcp &
  This seems to be caused by invalid pointer access which occurs
  when the process exits during the kill() code is execuetd. This
  patch avoids the issue by not using kill().
This commit is contained in:
Takashi Yano 2020-02-06 19:48:17 +09:00 committed by Ken Brown
parent 2e410eecda
commit d6485353a1
2 changed files with 6 additions and 6 deletions

View File

@ -2217,7 +2217,7 @@ class fhandler_pty_slave: public fhandler_pty_common
{
if (!mask && get_ttyp ()->pcon_pid &&
get_ttyp ()->pcon_pid != myself->pid &&
kill (get_ttyp ()->pcon_pid, 0) == 0)
!!pinfo (get_ttyp ()->pcon_pid))
return;
get_ttyp ()->mask_switch_to_pcon_in = mask;
}

View File

@ -1103,7 +1103,7 @@ fhandler_pty_slave::set_switch_to_pcon (int fd_set)
skip_console_setting:
restore_reattach_pcon ();
if (get_ttyp ()->pcon_pid == 0 ||
kill (get_ttyp ()->pcon_pid, 0) != 0)
!pinfo (get_ttyp ()->pcon_pid))
get_ttyp ()->pcon_pid = myself->pid;
get_ttyp ()->switch_to_pcon_in = true;
}
@ -1111,7 +1111,7 @@ skip_console_setting:
{
wait_pcon_fwd ();
if (get_ttyp ()->pcon_pid == 0 ||
kill (get_ttyp ()->pcon_pid, 0) != 0)
!pinfo (get_ttyp ()->pcon_pid))
get_ttyp ()->pcon_pid = myself->pid;
get_ttyp ()->switch_to_pcon_out = true;
}
@ -1124,7 +1124,7 @@ fhandler_pty_slave::reset_switch_to_pcon (void)
this->set_switch_to_pcon (fd);
if (get_ttyp ()->pcon_pid &&
get_ttyp ()->pcon_pid != myself->pid &&
kill (get_ttyp ()->pcon_pid, 0) == 0)
!!pinfo (get_ttyp ()->pcon_pid))
/* There is a process which is grabbing pseudo console. */
return;
if (isHybrid)
@ -2728,7 +2728,7 @@ fhandler_pty_slave::fixup_after_attach (bool native_maybe, int fd_set)
ENABLE_PROCESSED_INPUT | ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT;
SetConsoleMode (get_handle (), mode);
if (get_ttyp ()->pcon_pid == 0 ||
kill (get_ttyp ()->pcon_pid, 0) != 0)
!pinfo (get_ttyp ()->pcon_pid))
get_ttyp ()->pcon_pid = myself->pid;
get_ttyp ()->switch_to_pcon_in = true;
}
@ -2739,7 +2739,7 @@ fhandler_pty_slave::fixup_after_attach (bool native_maybe, int fd_set)
if (!get_ttyp ()->switch_to_pcon_out)
wait_pcon_fwd ();
if (get_ttyp ()->pcon_pid == 0 ||
kill (get_ttyp ()->pcon_pid, 0) != 0)
!pinfo (get_ttyp ()->pcon_pid))
get_ttyp ()->pcon_pid = myself->pid;
get_ttyp ()->switch_to_pcon_out = true;