Hi Takashi,
On Jan 1 15:47, Takashi Yano wrote:
> - If two PTYs are opened in the same process and the first one
> is closed, the helper process for the first PTY remains running.
> This patch fixes the issue.
> ---
> [...]
> diff --git a/winsup/utils/cygwin-console-helper.cc
> b/winsup/utils/cygwin-console-helper.cc
> index 66004bd15..6255fb93d 100644
> --- a/winsup/utils/cygwin-console-helper.cc
> +++ b/winsup/utils/cygwin-console-helper.cc
> @@ -4,14 +4,24 @@ int
> main (int argc, char **argv)
> {
> char *end;
> + HANDLE parent = NULL;
> if (argc < 3)
> exit (1);
> + if (argc == 5)
> + parent = OpenProcess (PROCESS_DUP_HANDLE, FALSE,
> + strtoull (argv[4], &end, 0));
> HANDLE h = (HANDLE) strtoull (argv[1], &end, 0);
> + if (parent)
> + DuplicateHandle (parent, h, GetCurrentProcess (), &h,
> + 0, FALSE, DUPLICATE_SAME_ACCESS);
> SetEvent (h);
> - if (argc == 4) /* Pseudo console helper mode for PTY */
> + if (argc == 4 || argc == 5) /* Pseudo console helper mode for PTY */
> {
> SetConsoleCtrlHandler (NULL, TRUE);
> HANDLE hPipe = (HANDLE) strtoull (argv[3], &end, 0);
> + if (parent)
> + DuplicateHandle (parent, hPipe, GetCurrentProcess (), &hPipe,
> + 0, FALSE, DUPLICATE_SAME_ACCESS);
> char buf[64];
> sprintf (buf, "StdHandles=%p,%p\n",
> GetStdHandle (STD_INPUT_HANDLE),
> @@ -21,6 +31,9 @@ main (int argc, char **argv)
> CloseHandle (hPipe);
> }
> h = (HANDLE) strtoull (argv[2], &end, 0);
> + if (parent)
> + DuplicateHandle (parent, h, GetCurrentProcess (), &h,
> + 0, FALSE, DUPLICATE_SAME_ACCESS);I think it would be better if cygwin-console-helper closes the parent handle at this point before waiting. I have a bad feeling keeping the PROCESS_DUP_HANDLE handle open for longer than necessary, after the handle leakage we had in execve lately. But then again, given that Cygwin uses EXTENDED_STARTUPINFO_PRESENT anyway, wouldn't it makes sense to pass the required handles with PROC_THREAD_ATTRIBUTE_HANDLE_LIST to avoid having to open the parent with PROCESS_DUP_HANDLE? Thanks, Corinna -- Corinna Vinschen Cygwin Maintainer
signature.asc
Description: PGP signature
