On Wed, Jun 21 2017, Simon Ruderich jotted: > 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; Thanks, silly mistake. Will fix. > Btw. is there a reason why recursion_limit is a static variable > and not a constant/define? Nope, will make it a const. Thanks.