Cygwin: console: Fix open() failure when the console owner calls exec().

Currently, open() tries to attach to the console which is owned by
the console owner process. However, when the owner process calls
exec(), AttachConsole() to dwProcessId may sometimes fail due to
unlucky timing. With this patch, open() tries to attach also to
exec_dwProcessId if attaching to dwProcessId fails. That is, open()
tries to attach to both the stub process and target process to
prevent the above situation.

Fixes: 3721a756b0 ("Cygwin: console: Make the console accessible from other terminals.")
Signed-off-by: Takashi Yano <takashi.yano@nifty.ne.jp>
This commit is contained in:
Takashi Yano 2024-11-05 20:20:21 +09:00
parent 37920d33ac
commit df0953aa29
1 changed files with 6 additions and 0 deletions

View File

@ -84,6 +84,10 @@ fhandler_console::attach_console (pid_t owner, bool *err)
DWORD attached =
fhandler_pty_common::get_console_process_id (p->dwProcessId,
true, false, false);
if (!attached)
attached =
fhandler_pty_common::get_console_process_id (p->exec_dwProcessId,
true, false, false);
if (!attached)
{
resume_pid =
@ -91,6 +95,8 @@ fhandler_console::attach_console (pid_t owner, bool *err)
false, false, false);
FreeConsole ();
BOOL r = AttachConsole (p->dwProcessId);
if (!r)
r = AttachConsole (p->exec_dwProcessId);
if (!r)
{
if (resume_pid)