From: Junio C Hamano Date: Sat, 3 Apr 2010 19:28:43 +0000 (-0700) Subject: Merge branch 'sp/maint-http-backend-die-triggers-die-recursively' X-Git-Tag: v1.7.1-rc0~10 X-Git-Url: https://www.git.lorimer.id.au/gitweb.git/diff_plain/7b1cb5c40ebb57c5a26f1335807be24dba8d4518?hp=9b5a7c447b72d10442858193b5aae03a19fb1720 Merge branch 'sp/maint-http-backend-die-triggers-die-recursively' * sp/maint-http-backend-die-triggers-die-recursively: http-backend: Don't infinite loop during die() --- diff --git a/http-backend.c b/http-backend.c index 345c12b790..d1e83d0906 100644 --- a/http-backend.c +++ b/http-backend.c @@ -538,15 +538,19 @@ static void service_rpc(char *service_name) static NORETURN void die_webcgi(const char *err, va_list params) { - char buffer[1000]; + static int dead; - http_status(500, "Internal Server Error"); - hdr_nocache(); - end_headers(); + if (!dead) { + char buffer[1000]; + dead = 1; - vsnprintf(buffer, sizeof(buffer), err, params); - fprintf(stderr, "fatal: %s\n", buffer); - exit(0); + vsnprintf(buffer, sizeof(buffer), err, params); + fprintf(stderr, "fatal: %s\n", buffer); + http_status(500, "Internal Server Error"); + hdr_nocache(); + end_headers(); + } + exit(0); /* we successfully reported a failure ;-) */ } static char* getdir(void)