[email protected] writes:

> From: Lars Schneider <[email protected]>
>
> 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 <[email protected]>
> ---
>  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?

Reply via email to