Re: [PATCH 2/5] thread-utils: add a threaded task queue
- From
Johannes Schindelin <johannes.schindelin@gmx.de>
- Date
- Aug 27, 2015, 12:59 UTC
- Message-ID
- <a35977776a7ea97b0ddd4d1921e3e95f@www.dscho.org>
- In-Reply-To
- <1440636766-12738-3-git-send-email-sbeller@google.com>
Hi Stefan,
On 2015-08-27 02:52, Stefan Beller wrote:
Show 18 quoted lines
> diff --git a/run-command.c b/run-command.c > index 28e1d55..cb15cd9 100644 > --- a/run-command.c > +++ b/run-command.c > @@ -668,6 +668,22 @@ int git_atexit(void (*handler)(void)) > > #endif > > +void setup_main_thread(void) > [...] > > diff --git a/thread-utils.c b/thread-utils.c > index a2135e0..b45ab92 100644 > --- a/thread-utils.c > +++ b/thread-utils.c > [...] > +/* FIXME: deduplicate this code with run-command.c */ > +static void setup_main_thread(void)
Do you remember off-hand why the code could not be moved to thread-utils.c wholesale? Just curious.
Show 15 quoted lines
> +#else /* NO_PTHREADS */
> +
> +struct task_queue {
> + int early_return;
> +};
> +
> +struct task_queue *create_task_queue(unsigned max_threads)
> +{
> + struct task_queue *tq = xmalloc(sizeof(*tq));
> +
> + tq->early_return = 0;
> +}
> +
> +void add_task(struct task_queue *tq,
> + int (*fct)(struct task_queue *tq, void *task),Might make sense to typedef this... Maybe task_t?
> + void *task)
> +{
> + if (tq->early_return)
> + return;Ah, so "early_return" actually means "interrupted" or "canceled"?
I guess I will have to set aside some time to wrap my head around the way tasks are handled here, in particular how the two `early_return` variables (`dispatcher()`'s local variable and the field in the `task_queue`) interact.
Thanks! Dscho