diff options
author | Takashi Yano <takashi.yano@nifty.ne.jp> | 2019-09-04 16:47:42 +0300 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2019-09-04 17:01:07 +0300 |
commit | d4045fdbef60d8e7e0d11dfe38b048ea2cb8708b (patch) | |
tree | 8070b21fc8c597ab2c37a1ee456887e15d6e2dbe | |
parent | 83b2d576c835dad6b8e2ea53b55a25e7bfcdcde7 (diff) |
Cygwin: pty: Add a workaround for ^C handling.
- Pseudo console support introduced by commit
169d65a5774acc76ce3f3feeedcbae7405aa9b57 sometimes cause random
crash or freeze by pressing ^C while cygwin and non-cygwin
processes are executed simultaneously in the same pty. This
patch is a workaround for this issue.
-rw-r--r-- | winsup/cygwin/fork.cc | 1 | ||||
-rw-r--r-- | winsup/cygwin/spawn.cc | 6 |
2 files changed, 6 insertions, 1 deletions
diff --git a/winsup/cygwin/fork.cc b/winsup/cygwin/fork.cc index a3a7e7505..0a929dffd 100644 --- a/winsup/cygwin/fork.cc +++ b/winsup/cygwin/fork.cc @@ -213,7 +213,6 @@ frok::child (volatile char * volatile here) - terminate the current fork call even if the child is initialized. */ sync_with_parent ("performed fork fixups and dynamic dll loading", true); - init_console_handler (myself->ctty > 0); ForceCloseHandle1 (fork_info->forker_finished, forker_finished); pthread::atforkchild (); diff --git a/winsup/cygwin/spawn.cc b/winsup/cygwin/spawn.cc index 4bb28c47b..15cba3610 100644 --- a/winsup/cygwin/spawn.cc +++ b/winsup/cygwin/spawn.cc @@ -635,6 +635,12 @@ child_info_spawn::worker (const char *prog_arg, const char *const *argv, if (ptys) ptys->fixup_after_attach (!iscygwin ()); + if (!iscygwin ()) + { + init_console_handler (myself->ctty > 0); + myself->ctty = 0; + } + loop: /* When ruid != euid we create the new process under the current original account and impersonate in child, this way maintaining the different |