Signed-off-by: Ramsay Jones <ramsay@xxxxxxxxxxxxxxxxxxxx> --- Hi Lars, If you need to re-roll your 'ls/filter-process' branch, could you please squash this into the relevant commit c42a4cbc ("run-command: move check_pipe() from write_or_die to run_command", 20-09-2016). [Note that commit 9658846c ("write_or_die: handle EPIPE in async threads", 24-02-2016) introduced async_exit() specifically for use in the implementation of check_pipe(). Now that you have moved check_pipe() into run-command.c, it no longer needs to be public.] Thanks! ATB, Ramsay Jones run-command.c | 30 +++++++++++++++--------------- run-command.h | 3 +-- 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/run-command.c b/run-command.c index b72f6d1..3269362 100644 --- a/run-command.c +++ b/run-command.c @@ -6,19 +6,6 @@ #include "thread-utils.h" #include "strbuf.h" -void check_pipe(int err) -{ - if (err == EPIPE) { - if (in_async()) - async_exit(141); - - signal(SIGPIPE, SIG_DFL); - raise(SIGPIPE); - /* Should never happen, but just in case... */ - exit(141); - } -} - void child_process_init(struct child_process *child) { memset(child, 0, sizeof(*child)); @@ -647,7 +634,7 @@ int in_async(void) return !pthread_equal(main_thread, pthread_self()); } -void NORETURN async_exit(int code) +static void NORETURN async_exit(int code) { pthread_exit((void *)(intptr_t)code); } @@ -697,13 +684,26 @@ int in_async(void) return process_is_async; } -void NORETURN async_exit(int code) +static void NORETURN async_exit(int code) { exit(code); } #endif +void check_pipe(int err) +{ + if (err == EPIPE) { + if (in_async()) + async_exit(141); + + signal(SIGPIPE, SIG_DFL); + raise(SIGPIPE); + /* Should never happen, but just in case... */ + exit(141); + } +} + int start_async(struct async *async) { int need_in, need_out; diff --git a/run-command.h b/run-command.h index e7c5f71..bb89c30 100644 --- a/run-command.h +++ b/run-command.h @@ -54,7 +54,6 @@ int finish_command(struct child_process *); int finish_command_in_signal(struct child_process *); int run_command(struct child_process *); -void check_pipe(int err); /* * Returns the path to the hook file, or NULL if the hook is missing @@ -141,7 +140,7 @@ struct async { int start_async(struct async *async); int finish_async(struct async *async); int in_async(void); -void NORETURN async_exit(int code); +void check_pipe(int err); /** * This callback should initialize the child process and preload the -- 2.10.0