Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.kernel.org/pub/scm/git/git.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'run-command.c')
-rw-r--r--run-command.c34
1 files changed, 14 insertions, 20 deletions
diff --git a/run-command.c b/run-command.c
index 14ea409375..b69deb1cc5 100644
--- a/run-command.c
+++ b/run-command.c
@@ -1498,9 +1498,9 @@ enum child_state {
int run_processes_parallel_ungroup;
struct parallel_processes {
- void *data;
+ void *const data;
- size_t max_processes;
+ const size_t max_processes;
size_t nr_processes;
get_next_task_fn get_next_task;
@@ -1520,7 +1520,7 @@ struct parallel_processes {
struct pollfd *pfd;
unsigned shutdown : 1;
- unsigned ungroup : 1;
+ const unsigned ungroup : 1;
size_t output_owner;
struct strbuf buffered_output; /* of finished children */
@@ -1558,21 +1558,18 @@ static void handle_children_on_signal(int signo)
}
static void pp_init(struct parallel_processes *pp,
- size_t n,
get_next_task_fn get_next_task,
start_failure_fn start_failure,
- task_finished_fn task_finished,
- void *data, int ungroup)
+ task_finished_fn task_finished)
{
+ const size_t n = pp->max_processes;
+
if (!n)
BUG("you must provide a non-zero number of processes!");
- pp->max_processes = n;
-
trace_printf("run_processes_parallel: preparing to run up to %"PRIuMAX" tasks",
(uintmax_t)n);
- pp->data = data;
if (!get_next_task)
BUG("you need to specify a get_next_task function");
pp->get_next_task = get_next_task;
@@ -1580,16 +1577,9 @@ static void pp_init(struct parallel_processes *pp,
pp->start_failure = start_failure ? start_failure : default_start_failure;
pp->task_finished = task_finished ? task_finished : default_task_finished;
- pp->nr_processes = 0;
- pp->output_owner = 0;
- pp->shutdown = 0;
- pp->ungroup = ungroup;
CALLOC_ARRAY(pp->children, n);
- if (pp->ungroup)
- pp->pfd = NULL;
- else
+ if (!pp->ungroup)
CALLOC_ARRAY(pp->pfd, n);
- strbuf_init(&pp->buffered_output, 0);
for (size_t i = 0; i < n; i++) {
strbuf_init(&pp->children[i].err, 0);
@@ -1789,13 +1779,17 @@ void run_processes_parallel(size_t n,
int output_timeout = 100;
int spawn_cap = 4;
int ungroup = run_processes_parallel_ungroup;
- struct parallel_processes pp;
+ struct parallel_processes pp = {
+ .max_processes = n,
+ .data = pp_cb,
+ .buffered_output = STRBUF_INIT,
+ .ungroup = ungroup,
+ };
/* unset for the next API user */
run_processes_parallel_ungroup = 0;
- pp_init(&pp, n, get_next_task, start_failure, task_finished, pp_cb,
- ungroup);
+ pp_init(&pp, get_next_task, start_failure, task_finished);
while (1) {
for (i = 0;
i < spawn_cap && !pp.shutdown &&