From: Takashi Yano Date: Tue, 5 Nov 2024 11:20:21 +0000 (+0900) Subject: Cygwin: console: Fix open() failure when the console owner calls exec(). X-Git-Url: https://sourceware.org/git/?a=commitdiff_plain;h=df0953aa298c0c6b92b8735c6a703239db36091d;p=newlib-cygwin.git 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: 3721a756b0d8 ("Cygwin: console: Make the console accessible from other terminals.") Signed-off-by: Takashi Yano --- diff --git a/winsup/cygwin/fhandler/console.cc b/winsup/cygwin/fhandler/console.cc index 9cdc13dd2..ac47c8374 100644 --- a/winsup/cygwin/fhandler/console.cc +++ b/winsup/cygwin/fhandler/console.cc @@ -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)