dashed externals: kill children on exit

Several git commands are so-called dashed externals, that is commands executed as a child process of the git wrapper command. If the git wrapper is killed by a signal, the child process will continue to run. This is different from internal commands, which always die with the git wrapper command. Enable the recently introduced cleanup mechanism for child processes in order to make dashed externals act more in line with internal commands. Signed-off-by: Clemens Buchacher <drizzd@aon.at> Acked-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Clemens Buchacher committed Jan 8, 2012 at 21:41 UTC 10c6cddd928b24ac6030a172c6c7b46efb32aedc
3 files changed +3 -1
git.c
+1 -1
@@ -495,7 +495,7 @@ static void execv_dashed_external(const char **argv)
495 * if we fail because the command is not found, it is
496 * OK to return. Otherwise, we just pass along the status code.
497 */
498 - status = run_command_v_opt(argv, RUN_SILENT_EXEC_FAILURE);
498 + status = run_command_v_opt(argv, RUN_SILENT_EXEC_FAILURE | RUN_CLEAN_ON_EXIT);
499 if (status >= 0 || errno != ENOENT)
500 exit(status);
501
run-command.c
+1
@@ -497,6 +497,7 @@ static void prepare_run_command_v_opt(struct child_process *cmd,
497 cmd->stdout_to_stderr = opt & RUN_COMMAND_STDOUT_TO_STDERR ? 1 : 0;
498 cmd->silent_exec_failure = opt & RUN_SILENT_EXEC_FAILURE ? 1 : 0;
499 cmd->use_shell = opt & RUN_USING_SHELL ? 1 : 0;
500 + cmd->clean_on_exit = opt & RUN_CLEAN_ON_EXIT ? 1 : 0;
501 }
502
503 int run_command_v_opt(const char **argv, int opt)
run-command.h
+1
@@ -53,6 +53,7 @@ extern int run_hook(const char *index_file, const char *name, ...);
53 #define RUN_COMMAND_STDOUT_TO_STDERR 4
54 #define RUN_SILENT_EXEC_FAILURE 8
55 #define RUN_USING_SHELL 16
56 +#define RUN_CLEAN_ON_EXIT 32
57 int run_command_v_opt(const char **argv, int opt);
58
59 /*