From: Johannes Sixt <j6t@kdbg.org>
To: Stefan Beller <sbeller@google.com>, git@vger.kernel.org
Cc: ramsay@ramsayjones.plus.com, jacob.keller@gmail.com,
peff@peff.net, gitster@pobox.com, jrnieder@gmail.com,
johannes.schindelin@gmail.com, Jens.Lehmann@web.de,
ericsunshine@gmail.com
Subject: Re: [PATCH] run-command: detect finished children by closed pipe rather than waitpid
Date: Sat, 7 Nov 2015 10:01:14 +0100 [thread overview]
Message-ID: <563DBDDA.2000106@kdbg.org> (raw)
In-Reply-To: <1446853737-19047-1-git-send-email-sbeller@google.com>
Am 07.11.2015 um 00:48 schrieb Stefan Beller:
> Detect if a child stopped working by checking if their stderr pipe
> was closed instead of checking their state with waitpid.
> As waitpid is not fully working in Windows, this is an approach which
> allows for better cross platform operation. (It's less code, too)
>
> Previously we did not close the read pipe of finished children, which we
> do now.
>
> The old way missed some messages on an early abort. We just killed the
> children and did not bother to look what was left over. With this approach
> we'd send a signal to the children and wait for them to close the pipe to
> have all the messages (including possible "killed by signal 15" messages).
>
> To have the test suite passing as before, we allow for real graceful
> abortion now. In case the user wishes to abort parallel execution
> the user needs to provide either the signal used to kill all children
> or the children are let run until they finish normally.
>
> Signed-off-by: Stefan Beller <sbeller@google.com>
> ---
> Hi,
>
> this applis on top of origin/sb/submodule-parallel-fetch,
> making Windows folks possibly even more happy. It makes the code easier
> to read and has less races on cleaning up a terminated child.
>
> It follows the idea of Johannes patch, instead of encoding information in .err
> I removed the in_use flag and added a state, currently having 3 states.
>
> Thanks,
> Stefan
>
> Johannes schrieb:
> > First let me say that I find it very questionable that the callbacks
> > receive a struct child_process.
>
> I tried to get rid of the child_process struct in the callbacks, but that's
> not as easy as one may think.
Fair enough. I see you removed .err, .no_stdin and .stdout_to_stderr
from the callback. Good.
> pp->nr_processes--;
> - pp->children[i].in_use = 0;
> + pp->children[i].state = FREE;
> pp->pfd[i].fd = -1;
> child_process_deinit(&pp->children[i].process);
This cleanup is implied by finish_command and can be removed.
> child_process_init(&pp->children[i].process);
> @@ -1195,12 +1175,12 @@ int run_processes_parallel(int n,
> i < spawn_cap && !pp->shutdown &&
> pp->nr_processes < pp->max_processes;
> i++) {
> - int code = pp_start_one(pp);
> + code = pp_start_one(pp);
> if (!code)
> continue;
> if (code < 0) {
> pp->shutdown = 1;
> - kill_children(pp, SIGTERM);
> + kill_children(pp, -code);
I'll see what this means for our kill emulation on Windows. Currently,
we handle only SIGTERM.
> }
> break;
> }
Thanks you very much!
-- Hannes
next prev parent reply other threads:[~2015-11-07 9:01 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-06 23:48 [PATCH] run-command: detect finished children by closed pipe rather than waitpid Stefan Beller
2015-11-07 6:28 ` Torsten Bögershausen
2015-11-07 9:01 ` Johannes Sixt [this message]
2015-11-11 20:37 ` Stefan Beller
2015-11-11 20:48 ` Johannes Sixt
2015-11-11 20:53 ` Stefan Beller
2015-11-11 22:18 ` Johannes Sixt
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=563DBDDA.2000106@kdbg.org \
--to=j6t@kdbg.org \
--cc=Jens.Lehmann@web.de \
--cc=ericsunshine@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jacob.keller@gmail.com \
--cc=johannes.schindelin@gmail.com \
--cc=jrnieder@gmail.com \
--cc=peff@peff.net \
--cc=ramsay@ramsayjones.plus.com \
--cc=sbeller@google.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).