Thread (1 message) 1 message, 1 author, 2015-03-16

Re: [PATCH v2 0/7] CLONE_FD: Task exit notification via file descriptor

From: <hidden>
Date: 2015-03-16 23:25:41
Also in: linux-fsdevel, lkml

On Mon, Mar 16, 2015 at 02:44:20PM -0700, Kees Cook wrote:
On Sun, Mar 15, 2015 at 12:59 AM, Josh Triplett [off-list ref] wrote:
quoted
- Make poll on a CLONE_FD for an exited task also return POLLHUP, for
  compatibility with FreeBSD's pdfork.  Thanks to David Drysdale for calling
  attention to pdfork.
I think POLLHUP should be mentioned in the manpage (now it only
mentions POLLIN).
Added for v3.
quoted
       CLONE_FD
              Return  a file descriptor associated with the new process, stor‐
              ing it in location clonefd in the parent's address space.   When
              the new process exits, the file descriptor will become available
              for reading.

              Unlike using  signalfd(2)  for  the  SIGCHLD  signal,  the  file
              descriptor  returned  by  clone4()  with the CLONE_FD flag works
              even with SIGCHLD unblocked in one or more threads of the parent
              process,  allowing  the  process  to have different handlers for
              different child processes, such as those created by  a  library,
              without  introducing  race conditions around process-wide signal
              handling.

              clonefd_flags may contain the following additional flags for use
              with CLONE_FD:


              O_CLOEXEC
                     Set  the  close-on-exec  flag on the new file descriptor.
                     See the description of the O_CLOEXEC flag in open(2)  for
                     reasons why this may be useful.
This begs the question: what happens when all CLONE_FD fds for a
process are closed? Will the parent get SIGCHLD instead, will it
auto-reap, or will it be un-wait-able (I assume not this...)
Whether the parent gets SIGCHLD is determined only by what signal you
request in clone; if you clone with CLONE_FD | SIGCHLD (or
CLONE_AUTOREAP | CLONE_FD | SIGCHLD), you'll get notification via both
clonefd (if you have one) and signal (if you have a handler).  If you
pass a 0 signal (just CLONE_FD or CLONE_AUTOREAP | CLONE_FD), you'll
receive no signal, only the notification via clonefd.  Independently, if
you have CLONE_AUTOREAP set, the process will autoreap.

Those are all orthogonal now.

If you close the clonefd, nothing special happens other than a
put_task_struct.  While this is conceptually somewhat like a pipe, the
data is actually generated at read time, so the task exit doesn't care
whether there's a live clonefd or not.  (Or, in the future, if there are
multiple live clonefds for the same process.)
Looks promising!
Thanks!

And thanks for catching the manpage issue.  I'd definitely welcome any
comments you have on the implementation as well.

- Josh Triplett
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help