Re: [PATCH v9 04/14] run-command: add wait_on_exit
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Oct 4, 2016, 19:30 UTC
- Message-ID
- <xmqqh98rud20.fsf@gitster.mtv.corp.google.com>
- In-Reply-To
- <20161004125947.67104-5-larsxschneider@gmail.com>
larsxschneider@gmail.com writes:
Show 44 quoted lines
> From: Lars Schneider <larsxschneider@gmail.com>
>
> The flag 'clean_on_exit' kills child processes spawned by Git on exit.
> A hard kill like this might not be desired in all cases.
>
> Add 'wait_on_exit' which closes the child's stdin on Git exit and waits
> until the child process has terminated.
>
> The flag is used in a subsequent patch.
>
> Signed-off-by: Lars Schneider <larsxschneider@gmail.com>
> ---
> run-command.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++--------
> run-command.h | 3 +++
> 2 files changed, 50 insertions(+), 8 deletions(-)
>
> diff --git a/run-command.c b/run-command.c
> index 3269362..96c54fe 100644
> --- a/run-command.c
> +++ b/run-command.c
> @@ -21,6 +21,9 @@ void child_process_clear(struct child_process *child)
>
> struct child_to_clean {
> pid_t pid;
> + char *name;
> + int stdin;
> + int wait;
> struct child_to_clean *next;
> };
> static struct child_to_clean *children_to_clean;
> @@ -28,12 +31,33 @@ static int installed_child_cleanup_handler;
>
> static void cleanup_children(int sig, int in_signal)
> {
> + int status;
> + struct child_to_clean *p = children_to_clean;
> +
> + /* Close the the child's stdin as indicator that Git will exit soon */
> + while (p) {
> + if (p->wait)
> + if (p->stdin > 0)
> + close(p->stdin);
> + p = p->next;
> + }This part and the "stdin" field feels a bit too specific to the caller you are adding. Allowing the user of the API to specify what clean-up cation needs to be taken in the form of a callback function may not be that much more effort and would be more flexible and useful, I would imagine?