run-command: do not pass child process data into callbacks
The expected way to pass data into the callback is to pass them via
the customizable callback pointer. The error reporting in
default_{start_failure, task_finished} is not user friendly enough, that
we want to encourage using the child data for such purposes.
Furthermore the struct child data is cleaned by the run-command API,
before we access them in the callbacks, leading to use-after-free
situations.
Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
62104ba14a
commit
2a73b3dad0
@ -158,8 +158,7 @@ typedef int (*get_next_task_fn)(struct child_process *cp,
|
||||
* To send a signal to other child processes for abortion, return
|
||||
* the negative signal number.
|
||||
*/
|
||||
typedef int (*start_failure_fn)(struct child_process *cp,
|
||||
struct strbuf *err,
|
||||
typedef int (*start_failure_fn)(struct strbuf *err,
|
||||
void *pp_cb,
|
||||
void *pp_task_cb);
|
||||
|
||||
@ -178,7 +177,6 @@ typedef int (*start_failure_fn)(struct child_process *cp,
|
||||
* the negative signal number.
|
||||
*/
|
||||
typedef int (*task_finished_fn)(int result,
|
||||
struct child_process *cp,
|
||||
struct strbuf *err,
|
||||
void *pp_cb,
|
||||
void *pp_task_cb);
|
||||
@ -192,9 +190,8 @@ typedef int (*task_finished_fn)(int result,
|
||||
* (both stdout and stderr) is routed to stderr in a manner that output
|
||||
* from different tasks does not interleave.
|
||||
*
|
||||
* If start_failure_fn or task_finished_fn are NULL, default handlers
|
||||
* will be used. The default handlers will print an error message on
|
||||
* error without issuing an emergency stop.
|
||||
* start_failure_fn and task_finished_fn can be NULL to omit any
|
||||
* special handling.
|
||||
*/
|
||||
int run_processes_parallel(int n,
|
||||
get_next_task_fn,
|
||||
|
||||
Reference in New Issue
Block a user