git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 2/5] run-command: Call get_next_task with a clean child process.

From
Junio C Hamano <gitster@pobox.com>
Date
Oct 20, 2015, 18:49 UTC
Message-ID
<xmqq61218jfd.fsf@gitster.mtv.corp.google.com>
In-Reply-To
<1445279086-31066-3-git-send-email-sbeller@google.com>
Stefan Beller <sbeller@google.com> writes:
> If the `get_next_task` did not explicitly called child_process_init
I locally did "If get_next_task did not explicitly call child_process_init"
Show 7 quoted lines
> and only filled in some fields, there may have been some stale data
> in the child process. This is hard to debug and also adds a review
> burden for each new user of that API. To improve the situation, we
> pass only cleanly initialized child structs to the get_next_task.
>
> Signed-off-by: Stefan Beller <sbeller@google.com>
> ---
Again this makes sense.

Another way, which I suspect may be conceptually cleaner, would be to do this clean-up where pp->children[i].in_use is set to false, as that is where the particular task is declared to be available for reuse. That location should be responsible to ensure that the task indeed is reusable by calling child_process_init().

By the way, does child_process_init() leak old argv/env arrays, or have they already been cleared by calling finish_command() when we come to this codepath?

Show 16 quoted lines
>  run-command.c | 2 ++
>  1 file changed, 2 insertions(+)
>
> diff --git a/run-command.c b/run-command.c
> index 8f47c6e..b8b5747 100644
> --- a/run-command.c
> +++ b/run-command.c
> @@ -1010,6 +1010,8 @@ static int pp_start_one(struct parallel_processes *pp)
>  	if (i == pp->max_processes)
>  		die("BUG: bookkeeping is hard");
>  
> +	child_process_init(&pp->children[i].process);
> +
>  	if (!pp->get_next_task(&pp->children[i].data,
>  			       &pp->children[i].process,
>  			       &pp->children[i].err,
Previous: Stefan BellerNext: Stefan Beller
Message 5 of 12 in “Fixes for the parallel processing”
  1. 0/5 Fixes for the parallel processingStefan Beller, Oct 19, 2015
  2. 1/5 run-command: Fix early shutdownStefan Beller, Oct 19, 2015
  3. Junio C HamanoOct 20, 2015
  4. 2/5 run-command: Call get_next_task with a clean child process.Stefan Beller, Oct 19, 2015
  5. Junio C HamanoOct 20, 2015
  6. Stefan BellerOct 20, 2015
  7. 3/5 run-command: Initialize the shutdown flagStefan Beller, Oct 19, 2015
  8. 4/5 test-run-command: test for gracefully abortingStefan Beller, Oct 19, 2015
  9. 5/5 test-run-command: Increase test coverageStefan Beller, Oct 19, 2015
  10. Junio C HamanoOct 20, 2015
  11. Stefan BellerOct 20, 2015
  12. 6/5 run-command: Fix missing output from late callbacksStefan Beller, Oct 20, 2015

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.