On Tue, Jun 20, 2017 at 08:49:59PM +0200, Ævar Arnfjörð Bjarmason wrote: > If I understand you correctly this on top: > > diff --git a/usage.c b/usage.c > index 1c198d4882..f6d5af2bb4 100644 > --- a/usage.c > +++ b/usage.c > @@ -46,7 +46,19 @@ static int die_is_recursing_builtin(void) > static int dying; > static int recursion_limit = 1024; > > - return dying++ > recursion_limit; > + dying++; > + > + if (!dying) { This will never trigger as dying was incremented two lines before. But I think it's already handled by the dying < recursion_limit case so we can just omit it. > + /* ok, normal */ > + return 0; > + } else if (dying < recursion_limit) { > + /* only show the warning once */ > + if (dying == 1) > + warning("die() called many times. Recursion error or racy threaded death!"); > + return 0; /* don't bail yet */ > + } else { > + return 1; > + } > } Maybe restructure it like this: dying++ if (dying > recursion_limit) return 1; if (dying == 1) warning(); return 0; Btw. is there a reason why recursion_limit is a static variable and not a constant/define? Regards Simon -- + privacy is necessary + using gnupg http://gnupg.org + public key id: 0x92FEFDB7E44C32F9