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.
Using sigprocmask is not the same as using signal.Ignore. sigprocmask
restored, at which point the signal will be delivered. signal.Ignore
will cause the signal to be ignored completely. That is,
SIG_IGN. It is not like sigprocmask.