This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: signals: Bug or manpage inconsistency?
- From: Oleg Nesterov <oleg at redhat dot com>
- To: Linus Torvalds <torvalds at linux-foundation dot org>
- Cc: Thomas Gleixner <tglx at linutronix dot de>, LKML <linux-kernel at vger dot kernel dot org>, Peter Zijlstra <peterz at infradead dot org>, Ingo Molnar <mingo at kernel dot org>, Michael Kerrisk <mtk dot manpages at gmail dot com>, linux-man at vger dot kernel dot org, libc-alpha <libc-alpha at sourceware dot org>
- Date: Tue, 30 May 2017 21:18:47 +0200
- Subject: Re: signals: Bug or manpage inconsistency?
- Authentication-results: sourceware.org; auth=none
- Authentication-results: ext-mx04.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com
- Authentication-results: ext-mx04.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=oleg at redhat dot com
- Dkim-filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 1A34C85540
- Dmarc-filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 1A34C85540
- References: <alpine.DEB.2.20.1705301402270.1950@nanos> <alpine.DEB.2.20.1705301750390.1950@nanos> <20170530170414.GA22463@redhat.com> <CA+55aFygrsUhzQzEOX7YLzxMWE_GbKhJjQZ7nSDXnFFbRAWCJA@mail.gmail.com>
On 05/30, Linus Torvalds wrote:
>
> On Tue, May 30, 2017 at 10:04 AM, Oleg Nesterov <oleg@redhat.com> wrote:
> >
> > I can't comment, I never tried to understand the rationality behind the current
> > behaviour. But at least the sending path should never drop a blocked SIG_DFL
> > signal, there is no other way to ensure you won't miss a signal during exec.
>
> Note that both SIG_DFL _and_ SIG_IGN are possible after exec,
Yes, if it was already ignored before exec. But ignoring the compatibility the
only important case is when it is SIG_DFL because of flush_signal_handlers().
> SIG_IGN doesn't mean "ignore signal forever". It means "ignore signals
> right now", and I think that our current signal blocking semantics are
> likely the correct ones,
I am not saying it is incorrect, but I agree with Thomas in that this
sigismember(t->blocked) in sig_ignored() doesn't look really nice.
> exactly because it means "when you start
> blocking signals, the kernel will not drop them".
if the process is singe-threaded or the signal is private, or it is blocked
by all threads. Otherwise it will wakeup another thread for no reason, the
signal will be dropped in get_signal().
And again, this doesn't look consistent with do_sigaction(). It even has a
comment which explains that we want to flush the ignored signals, blocked
or not.
Nevermind, I am not trying to argue, and
> So again, I really wouldn't want to change existing semantics unless
> there is a big real reason for it. Our current semantics are not
> wrong.
I certainly agree.
Oleg.