summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2010-04-03 12:28:43 -0700
committerJunio C Hamano <gitster@pobox.com>2010-04-03 12:28:43 -0700
commit7b1cb5c40ebb57c5a26f1335807be24dba8d4518 (patch)
tree0eab5db92d6e8f63851fc4a7630d8b42186a0e99
parent9b5a7c447b72d10442858193b5aae03a19fb1720 (diff)
parent5856b5f568ba957a0ea094fa676641ab246021fc (diff)
downloadgit-7b1cb5c40ebb57c5a26f1335807be24dba8d4518.tar.gz
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()
-rw-r--r--http-backend.c18
1 files changed, 11 insertions, 7 deletions
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)