All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nicholas Miell <nmiell@comcast.net>
To: Davide Libenzi <davidel@xmailserver.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Linux Kernel list <linux-kernel@vger.kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Paul Mackerras <paulus@samba.org>
Subject: signalfd API issues (was Re: [PATCH/RFC] signal races/bugs, losing TIF_SIGPENDING and other woes)
Date: Tue, 05 Jun 2007 17:58:43 -0700	[thread overview]
Message-ID: <1181091523.2788.28.camel@entropy> (raw)
In-Reply-To: <Pine.LNX.4.64.0706051736120.23673@alien.or.mcafeemobile.com>

On Tue, 2007-06-05 at 17:37 -0700, Davide Libenzi wrote:
> On Tue, 5 Jun 2007, Nicholas Miell wrote:
> 
> > On Tue, 2007-06-05 at 17:11 -0700, Davide Libenzi wrote:
> > > On Tue, 5 Jun 2007, Nicholas Miell wrote:
> > > 
> > > > Yes, that's certainly wrong, but that's an implementation issue. I was
> > > > more concerned about the design of the API.
> > > > 
> > > > Naively, I would expect a reads on a signalfd to return either process
> > > > signals or thread signals targeted towards the thread doing the read.
> > > > 
> > > > What it actually does (delivering process signals or thread signals
> > > > targeted towards the thread that created the signalfd) is weird.
> > > > 
> > > > For one, it means you can't create a single signalfd, stick it in an
> > > > epoll set, and then wait on that set from multiple threads.
> > > 
> > > In your box threads do share the sighand, don't they? :)
> > > 
> > 
> > I have no idea what you're trying to say, but it doesn't appear to
> > address the issue I raise.
> 
> "For one, it means you can't create a single signalfd, stick it in an
>  epoll set, and then wait on that set from multiple threads."
> 
> Why not?
> A signalfd, like I said, is attached to the sighand, that is shared by the 
> threads.
> 
> 

POSIX requires the following:

"At the time of generation, a determination shall be made whether the
signal has been generated for the process or for a specific thread
within the process. Signals which are generated by some action
attributable to a particular thread, such as a hardware fault, shall be
generated for the thread that caused the signal to be generated. Signals
that are generated in association with a process ID or process group ID
or an asynchronous event, such as terminal activity, shall be generated
for the process."

In practice, this means that signals like SIGSEGV/SIGFPE/SIGILL/etc. and
signals generated by pthread_kill() (i.e. tkill() or tgkill()) are
directed to a specific threads, while other signals are directed to the
process as a whole and serviced by any thread that isn't blocking that
specific signal.

Linux accomplishes this by having two lists of pending signals --
current->pending is the per-thread list and
current->signal->shared_pending is the process-wide list.

dequeue_signal(tsk, ...) looks for signals first in tsk->pending and
then in tsk->signal->shared_pending.

sys_signalfd() stores current in signalfd_ctx. signalfd_read() passes
that context to signalfd_dequeue, which passes that that saved
task_struct pointer to dequeue_signal.

This means that a signalfd will deliver signals targeted towards either
the original thread that created that signalfd, or signals targeted
towards the process as a whole.

This means that a single signalfd is not adequate to handle signal
delivery for all threads in a process, because signals targeted towards
threads other than the thread that originally created the signalfd will
never be queued to that signalfd.

Is my analysis wrong?

-- 
Nicholas Miell <nmiell@comcast.net>


  reply	other threads:[~2007-06-06  1:03 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-06-05  1:25 [PATCH/RFC] signal races/bugs, losing TIF_SIGPENDING and other woes Benjamin Herrenschmidt
2007-06-05  1:44 ` Linus Torvalds
2007-06-05  2:10   ` Benjamin Herrenschmidt
2007-06-05  2:38     ` Davide Libenzi
2007-06-05  3:22       ` Benjamin Herrenschmidt
2007-06-05  6:09         ` Nicholas Miell
2007-06-05  7:27           ` Benjamin Herrenschmidt
2007-06-05 23:51             ` Nicholas Miell
2007-06-06  0:03               ` Benjamin Herrenschmidt
2007-06-06  0:11               ` Davide Libenzi
2007-06-06  0:15                 ` Nicholas Miell
2007-06-06  0:37                   ` Davide Libenzi
2007-06-06  0:58                     ` Nicholas Miell [this message]
2007-06-06  2:50                       ` signalfd API issues (was Re: [PATCH/RFC] signal races/bugs, losing TIF_SIGPENDING and other woes) Benjamin Herrenschmidt
2007-06-06  3:29                         ` Davide Libenzi
2007-06-06  3:37                           ` Linus Torvalds
2007-06-06  4:08                             ` Nicholas Miell
2007-06-06  4:18                               ` Benjamin Herrenschmidt
2007-06-06  4:35                             ` Davide Libenzi
2007-06-06  6:47                             ` Benjamin Herrenschmidt
2007-06-06 22:36                               ` Davide Libenzi
2007-06-06  3:52                           ` Benjamin Herrenschmidt
2007-06-06 12:52                         ` Jeff Dike
2007-06-06 22:43                           ` Paul Mackerras
2007-06-07  2:20                             ` Jeff Dike
2007-06-07  3:29                               ` Benjamin Herrenschmidt
2007-06-07 13:59                                 ` Jeff Dike
2007-06-07  3:21                           ` Benjamin Herrenschmidt
2007-06-05 15:52     ` [PATCH/RFC] signal races/bugs, losing TIF_SIGPENDING and other woes Davide Libenzi
2007-06-05 22:15       ` Benjamin Herrenschmidt
2007-06-05 22:50         ` Davide Libenzi
2007-06-05 22:59           ` Benjamin Herrenschmidt
2007-06-06  0:11             ` Davide Libenzi

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=1181091523.2788.28.camel@entropy \
    --to=nmiell@comcast.net \
    --cc=akpm@linux-foundation.org \
    --cc=benh@kernel.crashing.org \
    --cc=davidel@xmailserver.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=paulus@samba.org \
    --cc=torvalds@linux-foundation.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: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.