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.

Reply via email to