From 6cbe26c2a2deceaebe2edba306c774e8636330b5 Mon Sep 17 00:00:00 2001 From: Snaipe Date: Fri, 17 Jun 2016 11:53:55 +0200 Subject: [PATCH] pthread: Fixed child pump not being joined right after a fork. Fixes #125. --- src/compat/process.c | 10 +++++++++- src/compat/process.h | 1 + src/core/worker.c | 2 ++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/compat/process.c b/src/compat/process.c index 367aa30..1457090 100644 --- a/src/compat/process.c +++ b/src/compat/process.c @@ -176,13 +176,21 @@ void init_proc_compat(void) { #endif } -void free_proc_compat(void) { +void reset_proc_compat(void) { #ifndef VANILLA_WIN32 child_pump_running = false; pthread_join(child_pump, NULL); #endif } +void free_proc_compat(void) { +#ifndef VANILLA_WIN32 + if (child_pump_running) { + reset_proc_compat(); + } +#endif +} + #ifdef VANILLA_WIN32 struct wait_context { HANDLE wait_handle; diff --git a/src/compat/process.h b/src/compat/process.h index 193c12b..08d45be 100644 --- a/src/compat/process.h +++ b/src/compat/process.h @@ -62,5 +62,6 @@ unsigned long long get_process_id_of(s_proc_handle *proc); void init_proc_compat(void); void free_proc_compat(void); +void reset_proc_compat(void); #endif /* !COMPAT_PROCESS_H_ */ diff --git a/src/core/worker.c b/src/core/worker.c index 54d6868..e2de748 100644 --- a/src/core/worker.c +++ b/src/core/worker.c @@ -78,6 +78,8 @@ struct event *worker_read_event(struct worker_set *workers, s_pipe_file_handle * } void run_worker(struct worker_context *ctx) { + reset_proc_compat(); + cr_redirect_stdin(); g_event_pipe = pipe_out_handle(ctx->pipe, PIPE_CLOSE);