aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2010-04-09 22:38:16 -0700
committerJunio C Hamano <gitster@pobox.com>2010-04-09 22:38:16 -0700
commit326bea47cb7315a7ee8e428dbf6b1052ffb01b00 (patch)
tree5bca95de9df1acd0c6e7dffb24b68276f7efc86c
parentfe7e37235dd9b36402afeccb24bbced933e847d7 (diff)
parent5856b5f568ba957a0ea094fa676641ab246021fc (diff)
downloadgit-326bea47cb7315a7ee8e428dbf6b1052ffb01b00.tar.gz
git-326bea47cb7315a7ee8e428dbf6b1052ffb01b00.tar.xz
Merge branch 'sp/maint-http-backend-die-triggers-die-recursively' into maint
* 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 345c12b79..d1e83d090 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)