public inbox for cygwin-cvs@sourceware.org help / color / mirror / Atom feed
From: Corinna Vinschen <corinna@sourceware.org> To: cygwin-cvs@sourceware.org Subject: [newlib-cygwin] Cygwin: console: Abort read() on signal if SA_RESTART is not set. Date: Mon, 15 Feb 2021 13:23:27 +0000 (GMT) [thread overview] Message-ID: <20210215132327.DAFCB3851C3B@sourceware.org> (raw) https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=ad2877505520025abfb9eef2696ac14aec1f8c2e commit ad2877505520025abfb9eef2696ac14aec1f8c2e Author: Takashi Yano via Cygwin-patches <cygwin-patches@cygwin.com> Date: Sun Feb 14 18:42:50 2021 +0900 Cygwin: console: Abort read() on signal if SA_RESTART is not set. - Currently, console read() keeps reading after SIGWINCH is sent even if SA_RESTART flag is not set. With this patch, read() returns EINTR on SIGWINCH if SA_RESTART flag is not set. The same problem for SIGQUIT and SIGTSTP has also been fixed. Diff: --- winsup/cygwin/fhandler_console.cc | 7 +++---- winsup/cygwin/fhandler_termios.cc | 1 + winsup/cygwin/tty.cc | 1 + winsup/cygwin/tty.h | 1 + 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/winsup/cygwin/fhandler_console.cc b/winsup/cygwin/fhandler_console.cc index 3c0783575..78af6cf2b 100644 --- a/winsup/cygwin/fhandler_console.cc +++ b/winsup/cygwin/fhandler_console.cc @@ -586,12 +586,11 @@ wait_retry: case input_ok: /* input ready */ break; case input_signalled: /* signalled */ - release_input_mutex (); - /* The signal will be handled by cygwait() above. */ - continue; case input_winch: release_input_mutex (); - continue; + if (global_sigs[get_ttyp ()->last_sig].sa_flags & SA_RESTART) + continue; + goto sig_exit; default: /* Should not come here */ release_input_mutex (); diff --git a/winsup/cygwin/fhandler_termios.cc b/winsup/cygwin/fhandler_termios.cc index 9fbace95c..e8daf946b 100644 --- a/winsup/cygwin/fhandler_termios.cc +++ b/winsup/cygwin/fhandler_termios.cc @@ -133,6 +133,7 @@ tty_min::kill_pgrp (int sig) siginfo_t si = {0}; si.si_signo = sig; si.si_code = SI_KERNEL; + last_sig = sig; for (unsigned i = 0; i < pids.npids; i++) { diff --git a/winsup/cygwin/tty.cc b/winsup/cygwin/tty.cc index 41f81f694..7627cd6c7 100644 --- a/winsup/cygwin/tty.cc +++ b/winsup/cygwin/tty.cc @@ -251,6 +251,7 @@ tty::init () master_is_running_as_service = false; req_xfer_input = false; pcon_input_state = to_cyg; + last_sig = 0; } HANDLE diff --git a/winsup/cygwin/tty.h b/winsup/cygwin/tty.h index e1de7ab46..a8ddd68d6 100644 --- a/winsup/cygwin/tty.h +++ b/winsup/cygwin/tty.h @@ -48,6 +48,7 @@ public: fh_devices ntty; ULONGLONG last_ctrl_c; /* tick count of last ctrl-c */ bool is_console; + int last_sig; IMPLEMENT_STATUS_FLAG (bool, initialized) IMPLEMENT_STATUS_FLAG (bool, rstcons)
reply other threads:[~2021-02-15 13:23 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20210215132327.DAFCB3851C3B@sourceware.org \ --to=corinna@sourceware.org \ --cc=cygwin-cvs@sourceware.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).