mirror of
				https://github.com/openresty/openresty.git
				synced 2024-10-13 00:29:41 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			64 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
--- nginx-1.2.5/src/http/ngx_http_upstream.c	2012-08-06 10:34:08.000000000 -0700
 | 
						|
+++ nginx-1.2.5-patched/src/http/ngx_http_upstream.c	2012-09-09 21:58:04.727761891 -0700
 | 
						|
@@ -2383,7 +2383,7 @@
 | 
						|
 
 | 
						|
     if (c->read->timedout) {
 | 
						|
         ngx_connection_error(c, NGX_ETIMEDOUT, "upstream timed out");
 | 
						|
-        ngx_http_upstream_finalize_request(r, u, 0);
 | 
						|
+        ngx_http_upstream_finalize_request(r, u, NGX_HTTP_GATEWAY_TIME_OUT);
 | 
						|
         return;
 | 
						|
     }
 | 
						|
 
 | 
						|
@@ -2430,13 +2430,17 @@
 | 
						|
             if (u->busy_bufs == NULL) {
 | 
						|
 
 | 
						|
                 if (u->length == 0
 | 
						|
-                    || upstream->read->eof
 | 
						|
-                    || upstream->read->error)
 | 
						|
+                    || (upstream->read->eof && u->headers_in.content_length_n == -1))
 | 
						|
                 {
 | 
						|
                     ngx_http_upstream_finalize_request(r, u, 0);
 | 
						|
                     return;
 | 
						|
                 }
 | 
						|
 
 | 
						|
+                if (upstream->read->eof || upstream->read->error) {
 | 
						|
+                    ngx_http_upstream_finalize_request(r, u, NGX_HTTP_BAD_GATEWAY);
 | 
						|
+                    return;
 | 
						|
+                }
 | 
						|
+
 | 
						|
                 b->pos = b->start;
 | 
						|
                 b->last = b->start;
 | 
						|
             }
 | 
						|
@@ -2710,7 +2714,16 @@
 | 
						|
 #if 0
 | 
						|
             ngx_http_busy_unlock(u->conf->busy_lock, &u->busy_lock);
 | 
						|
 #endif
 | 
						|
-            ngx_http_upstream_finalize_request(r, u, 0);
 | 
						|
+
 | 
						|
+            if (p->upstream_done
 | 
						|
+                || (p->upstream_eof && u->headers_in.content_length_n == -1))
 | 
						|
+            {
 | 
						|
+                ngx_http_upstream_finalize_request(r, u, 0);
 | 
						|
+
 | 
						|
+            } else {
 | 
						|
+                ngx_http_upstream_finalize_request(r, u, NGX_HTTP_BAD_GATEWAY);
 | 
						|
+            }
 | 
						|
+
 | 
						|
             return;
 | 
						|
         }
 | 
						|
     }
 | 
						|
@@ -3073,6 +3086,13 @@
 | 
						|
         && rc != NGX_HTTP_REQUEST_TIME_OUT
 | 
						|
         && (rc == NGX_ERROR || rc >= NGX_HTTP_SPECIAL_RESPONSE))
 | 
						|
     {
 | 
						|
+        if (rc == NGX_ERROR) {
 | 
						|
+            r->headers_out.status = NGX_HTTP_INTERNAL_SERVER_ERROR;
 | 
						|
+
 | 
						|
+        } else {
 | 
						|
+            r->headers_out.status = rc;
 | 
						|
+        }
 | 
						|
+
 | 
						|
         rc = 0;
 | 
						|
     }
 | 
						|
 
 |