diff options
-rw-r--r-- | http-backend.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/http-backend.c b/http-backend.c index b6c0484fb2..3ad82a894d 100644 --- a/http-backend.c +++ b/http-backend.c @@ -500,21 +500,24 @@ static void service_rpc(char *service_name) strbuf_release(&buf); } +static int dead; static NORETURN void die_webcgi(const char *err, va_list params) { - static int dead; + if (dead <= 1) { + vreportf("fatal: ", err, params); - if (!dead) { - dead = 1; http_status(500, "Internal Server Error"); hdr_nocache(); end_headers(); - - vreportf("fatal: ", err, params); } exit(0); /* we successfully reported a failure ;-) */ } +static int die_webcgi_recursing(void) +{ + return dead++ > 1; +} + static char* getdir(void) { struct strbuf buf = STRBUF_INIT; @@ -569,6 +572,7 @@ int main(int argc, char **argv) git_extract_argv0_path(argv[0]); set_die_routine(die_webcgi); + set_die_is_recursing_routine(die_webcgi_recursing); if (!method) die("No REQUEST_METHOD from server"); |