From: Eric Wong Date: Tue, 13 Aug 2019 14:44:41 GMT Subject: Re: [PATCH v2 2/5] fetch: Add the "--fetch-jobs" option Message-ID: <20190813144441.qw5i3zbrvebz5o7z@dcvr> In-Reply-To: <20190812213448.2649-3-palmer@sifive.com> Palmer Dabbelt wrote: > diff --git a/builtin/fetch.c b/builtin/fetch.c > index 8aa6a0caf1ab..fa12ad44e7d9 100644 > --- a/builtin/fetch.c > +++ b/builtin/fetch.c > +static int next_remote_to_fetch(struct child_process *cp, > + struct strbuf *out, > + void *state_uncast, > + void **task_state_out) > +{ > + int i; > + struct fetch_remote *state = state_uncast; > + struct fetch_remote_task *task_state = NULL; > + const char *remote_name; > + > + if (state->next_remote_index >= state->all_remotes->nr) > + return 0; > + > + remote_name = state->all_remotes->items[state->next_remote_index].string; > + state->next_remote_index++; > + > + /* > + * Finds somewhere to store the state for a task. This is guarnteed to > + * succeed because there are always enough tasks allocated to cover the > + * number that have been requested to run in parallel. Rather than > + * bothering with some sort of free list, this just brute force > + * searches for a free task. The assumption is that there aren't that > + * many tasks to look through. > + */ > + for (i = 0; i < state->task_count; ++i) { > + if (!state->all_tasks[i].in_use) { > + task_state = state->all_tasks + i; > + break; > + } > + } Fwiw, I added list.h, the linked-list derived from the Linux kernel to simplify usage of free lists, queues, etc... I think it could improve readability, too; but I'm not really a C programmer and prefer high-level scripting languages.