]> sourceware.org Git - newlib-cygwin.git/commitdiff
Cygwin: console: Fix open() failure when the console owner calls exec(). main master github/main github/master
authorTakashi Yano <takashi.yano@nifty.ne.jp>
Tue, 5 Nov 2024 11:20:21 +0000 (20:20 +0900)
committerTakashi Yano <takashi.yano@nifty.ne.jp>
Tue, 5 Nov 2024 11:42:58 +0000 (20:42 +0900)
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 <takashi.yano@nifty.ne.jp>
winsup/cygwin/fhandler/console.cc

index 9cdc13dd2341805ad59254bf12c94e92507621df..ac47c83747ff9abce6db85fa29a23759438a657d 100644 (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)
This page took 0.034063 seconds and 5 git commands to generate.