On Fri, May 21, 2021 at 1:47 PM Brian Candler <b.cand...@pobox.com> wrote: > > If I understand rightly, it boils down to this: > https://play.golang.org/p/vYlTzluIuBL
Thanks. That's clearly a bug. The sig.ignored mask is not being updated when it should be. > The documentation does say "Reset undoes the effect of any prior calls to > Notify for the provided signals", without mentioning any effect on Ignore'd > signals. I think that is incomplete. Ian > On Friday, 21 May 2021 at 21:44:01 UTC+1 Ian Lance Taylor wrote: >> >> On Fri, May 21, 2021 at 1:37 PM Manlio Perillo <manlio....@gmail.com> wrote: >> > >> > On Friday, May 21, 2021 at 10:22:08 PM UTC+2 Ian Lance Taylor wrote: >> >> >> >> On Fri, May 21, 2021 at 7:49 AM Manlio Perillo <manlio....@gmail.com> >> >> wrote: >> >> > >> >> > In a program I want to read a password from the terminal, using >> >> > golang.org/x/term. >> >> > The problem is that there is a possibility that a signal is sent to the >> >> > program, resulting in the terminal state not being restored: >> >> > https://play.golang.org/p/4IjLve9gDx0 >> >> > >> >> > In case of term.ReadPassword, on Linux I noted that ECHO is restored, >> >> > but let's ignore it. >> >> > >> >> > What I tried to do was to ttemporarily block the signals, using >> >> > signal.Ignore and signal.Reset; the problem is that Reset doesn't reset >> >> > ignored signals. >> >> > >> >> > Looking at the runtime code, Go only use SIG_DFL in special cases. >> >> > Is there a reason why Reset don't reset ignore signals? Portability? >> >> > >> >> > Is there a simple, portable way, to do what I want? >> >> >> >> I thought that signal.Reset would reset a signal ignored by >> >> signal.Ignore. What happens when you try it? >> >> >> > >> > In https://play.golang.org/p/c88iu09mOgO, the SIGINT signal (via Ctrl-C) >> > is ignored after the call to `signal.Ignore`. >> > However SIGINT is still ignored after the call to `signal.Reset`. >> >> That is odd. Would you mind opening an issue with a test case? Thanks. >> >> >> >> In any case I don't see why your program wants to ignore signals. It >> >> seems better to catch the signal, restore the terminal, and exit. >> >> >> > >> > In some C/C++ programs I have often see the use sigprocmask: >> > https://www.gnu.org/software/libc/manual/html_node/Why-Block.html >> >> Using sigprocmask is not the same as using signal.Ignore. sigprocmask >> will temporarily block the signal until the old signal mask is >> restored, at which point the signal will be delivered. signal.Ignore >> will cause the signal to be ignored completely. That is, >> signal.Ignore is like using sigaction to change the handler to >> SIG_IGN. It is not like sigprocmask. >> >> Ian > > -- > You received this message because you are subscribed to the Google Groups > "golang-nuts" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to golang-nuts+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/golang-nuts/4033638c-347e-4c13-9a3f-bab3fbeb006an%40googlegroups.com. -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/CAOyqgcUi6n7Z9BNOjWwTGzYOEC5K%2BeffZ88-azLDK%2B8wrCAn9A%40mail.gmail.com.