From: Junio C Hamano Date: Tue, 16 Apr 2013 22:09:12 GMT Subject: Re: [PATCH v2 2/2] run-command: use thread-aware die_is_recursing routine Message-ID: <7v4nf6jfg7.fsf@alter.siamese.dyndns.org> In-Reply-To: <20130416195006.GB11185@sigill.intra.peff.net> Jeff King writes: > diff --git a/run-command.c b/run-command.c > index 765c2ce..1b32a12 100644 > --- a/run-command.c > +++ b/run-command.c > @@ -588,6 +588,7 @@ static pthread_key_t async_key; > static pthread_t main_thread; > static int main_thread_set; > static pthread_key_t async_key; > +static pthread_key_t async_die_counter; > > static void *run_thread(void *data) > { > @@ -614,6 +615,14 @@ static NORETURN void die_async(const char *err, va_list params) > > exit(128); > } > + > +static int async_die_is_recursing(void) > +{ > + void *ret = pthread_getspecific(async_die_counter); > + pthread_setspecific(async_die_counter, (void *)1); > + return ret != NULL; > +} > + > #endif > > int start_async(struct async *async) > @@ -695,7 +704,9 @@ int start_async(struct async *async) > main_thread_set = 1; > main_thread = pthread_self(); > pthread_key_create(&async_key, NULL); > + pthread_key_create(&async_die_counter, NULL); > set_die_routine(die_async); > + set_die_is_recursing_routine(async_die_is_recursing); > } > > if (proc_in >= 0) Will queue; thanks.