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
Stefan Beller <sbeller@google.com>
Date
Oct 20, 2015, 19:07 UTC
Message-ID
<CAGZ79kbzVXaO+WHHfwQYJnEdQU+3kUrwcKUPKTjL1YxTev5g8Q@mail.gmail.com>
In-Reply-To
<xmqq61218jfd.fsf@gitster.mtv.corp.google.com>
On Tue, Oct 20, 2015 at 11:49 AM, Junio C Hamano <gitster@pobox.com> wrote:
Show 25 quoted lines
> 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"
>
>> 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?

It does, yes. In the reroll I move the initialization to both pp_init (to init for the first use) and to the place where in_use is set to false.

Show 17 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: Junio C HamanoNext: Stefan Beller
Message 6 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.