Cygwin: pty: Add a workaround for issue of starting a lot of mintty.
- If a lot of mintty are started in a short time from a mintty, some of them hang with empty screen, crash immediately or hang on exiting mintty. The following report seems to be related to this issue. https://cygwin.com/pipermail/cygwin/2020-August/245751.html The cause is not clear at all, but this patch seems to solve the issue.
This commit is contained in:
parent
a44bc679a4
commit
f14d123ac6
|
@ -177,7 +177,7 @@ find_exec (const char *name, path_conv& buf, const char *search,
|
||||||
/* Utility for child_info_spawn::worker. */
|
/* Utility for child_info_spawn::worker. */
|
||||||
|
|
||||||
static HANDLE
|
static HANDLE
|
||||||
handle (int fd, bool writing)
|
handle (int fd, bool writing, bool iscygwin)
|
||||||
{
|
{
|
||||||
HANDLE h;
|
HANDLE h;
|
||||||
cygheap_fdget cfd (fd);
|
cygheap_fdget cfd (fd);
|
||||||
|
@ -188,6 +188,11 @@ handle (int fd, bool writing)
|
||||||
h = INVALID_HANDLE_VALUE;
|
h = INVALID_HANDLE_VALUE;
|
||||||
else if (!writing)
|
else if (!writing)
|
||||||
h = cfd->get_handle ();
|
h = cfd->get_handle ();
|
||||||
|
else if (cfd->get_major () == DEV_PTYS_MAJOR && iscygwin)
|
||||||
|
{
|
||||||
|
fhandler_pty_slave *ptys = (fhandler_pty_slave *)(fhandler_base *) cfd;
|
||||||
|
h = ptys->get_output_handle_cyg ();
|
||||||
|
}
|
||||||
else
|
else
|
||||||
h = cfd->get_output_handle ();
|
h = cfd->get_output_handle ();
|
||||||
|
|
||||||
|
@ -625,9 +630,11 @@ child_info_spawn::worker (const char *prog_arg, const char *const *argv,
|
||||||
|
|
||||||
/* Set up needed handles for stdio */
|
/* Set up needed handles for stdio */
|
||||||
si.dwFlags = STARTF_USESTDHANDLES;
|
si.dwFlags = STARTF_USESTDHANDLES;
|
||||||
si.hStdInput = handle ((in__stdin < 0 ? 0 : in__stdin), false);
|
si.hStdInput = handle ((in__stdin < 0 ? 0 : in__stdin), false,
|
||||||
si.hStdOutput = handle ((in__stdout < 0 ? 1 : in__stdout), true);
|
iscygwin ());
|
||||||
si.hStdError = handle (2, true);
|
si.hStdOutput = handle ((in__stdout < 0 ? 1 : in__stdout), true,
|
||||||
|
iscygwin ());
|
||||||
|
si.hStdError = handle (2, true, iscygwin ());
|
||||||
|
|
||||||
si.cb = sizeof (si);
|
si.cb = sizeof (si);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue