mirror of
				https://github.com/openresty/openresty.git
				synced 2024-10-13 00:29:41 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			150 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			150 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| diff --exclude '*~' --exclude '*.swp' -urp nginx-1.4.3/src/http/modules/ngx_http_scgi_module.c nginx-1.4.3-patched/src/http/modules/ngx_http_scgi_module.c
 | |
| --- nginx-1.4.3/src/http/modules/ngx_http_scgi_module.c	2013-02-09 19:08:42.000000000 -0800
 | |
| +++ nginx-1.4.3-patched/src/http/modules/ngx_http_scgi_module.c	2013-04-07 12:09:55.900492634 -0700
 | |
| @@ -39,6 +39,7 @@ static ngx_int_t ngx_http_scgi_process_s
 | |
|  static ngx_int_t ngx_http_scgi_process_header(ngx_http_request_t *r);
 | |
|  static void ngx_http_scgi_abort_request(ngx_http_request_t *r);
 | |
|  static void ngx_http_scgi_finalize_request(ngx_http_request_t *r, ngx_int_t rc);
 | |
| +static ngx_int_t ngx_http_scgi_input_filter_init(void *data);
 | |
|  
 | |
|  static void *ngx_http_scgi_create_loc_conf(ngx_conf_t *cf);
 | |
|  static char *ngx_http_scgi_merge_loc_conf(ngx_conf_t *cf, void *parent,
 | |
| @@ -446,6 +447,8 @@ ngx_http_scgi_handler(ngx_http_request_t
 | |
|      u->pipe->input_filter = ngx_event_pipe_copy_input_filter;
 | |
|      u->pipe->input_ctx = r;
 | |
|  
 | |
| +    u->input_filter_init = ngx_http_scgi_input_filter_init;
 | |
| +
 | |
|      rc = ngx_http_read_client_request_body(r, ngx_http_upstream_init);
 | |
|  
 | |
|      if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
 | |
| @@ -1046,6 +1049,17 @@ ngx_http_scgi_finalize_request(ngx_http_
 | |
|  }
 | |
|  
 | |
|  
 | |
| +static ngx_int_t
 | |
| +ngx_http_scgi_input_filter_init(void *data)
 | |
| +{
 | |
| +    ngx_http_request_t    *r = data;
 | |
| +
 | |
| +    r->upstream->length = -1;
 | |
| +
 | |
| +    return NGX_OK;
 | |
| +}
 | |
| +
 | |
| +
 | |
|  static void *
 | |
|  ngx_http_scgi_create_loc_conf(ngx_conf_t *cf)
 | |
|  {
 | |
| diff --exclude '*~' --exclude '*.swp' -urp nginx-1.4.3/src/http/modules/ngx_http_uwsgi_module.c nginx-1.4.3-patched/src/http/modules/ngx_http_uwsgi_module.c
 | |
| --- nginx-1.4.3/src/http/modules/ngx_http_uwsgi_module.c	2013-02-09 19:08:42.000000000 -0800
 | |
| +++ nginx-1.4.3-patched/src/http/modules/ngx_http_uwsgi_module.c	2013-04-07 11:58:24.546915778 -0700
 | |
| @@ -46,6 +46,7 @@ static ngx_int_t ngx_http_uwsgi_process_
 | |
|  static void ngx_http_uwsgi_abort_request(ngx_http_request_t *r);
 | |
|  static void ngx_http_uwsgi_finalize_request(ngx_http_request_t *r,
 | |
|      ngx_int_t rc);
 | |
| +static ngx_int_t ngx_http_uwsgi_input_filter_init(void *data);
 | |
|  
 | |
|  static void *ngx_http_uwsgi_create_loc_conf(ngx_conf_t *cf);
 | |
|  static char *ngx_http_uwsgi_merge_loc_conf(ngx_conf_t *cf, void *parent,
 | |
| @@ -479,6 +480,8 @@ ngx_http_uwsgi_handler(ngx_http_request_
 | |
|      u->pipe->input_filter = ngx_event_pipe_copy_input_filter;
 | |
|      u->pipe->input_ctx = r;
 | |
|  
 | |
| +    u->input_filter_init = ngx_http_uwsgi_input_filter_init;
 | |
| +
 | |
|      rc = ngx_http_read_client_request_body(r, ngx_http_upstream_init);
 | |
|  
 | |
|      if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
 | |
| @@ -1086,6 +1089,17 @@ ngx_http_uwsgi_finalize_request(ngx_http
 | |
|  }
 | |
|  
 | |
|  
 | |
| +static ngx_int_t
 | |
| +ngx_http_uwsgi_input_filter_init(void *data)
 | |
| +{
 | |
| +    ngx_http_request_t    *r = data;
 | |
| +
 | |
| +    r->upstream->length = -1;
 | |
| +
 | |
| +    return NGX_OK;
 | |
| +}
 | |
| +
 | |
| +
 | |
|  static void *
 | |
|  ngx_http_uwsgi_create_loc_conf(ngx_conf_t *cf)
 | |
|  {
 | |
| diff --exclude '*~' --exclude '*.swp' -urp nginx-1.4.3/src/http/ngx_http_upstream.c nginx-1.4.3-patched/src/http/ngx_http_upstream.c
 | |
| --- nginx-1.4.3/src/http/ngx_http_upstream.c	2013-02-11 06:39:49.000000000 -0800
 | |
| +++ nginx-1.4.3-patched/src/http/ngx_http_upstream.c	2013-04-08 16:37:48.326752696 -0700
 | |
| @@ -2399,7 +2399,7 @@ ngx_http_upstream_process_non_buffered_u
 | |
|  
 | |
|      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;
 | |
|      }
 | |
|  
 | |
| @@ -2446,13 +2446,20 @@ ngx_http_upstream_process_non_buffered_r
 | |
|              if (u->busy_bufs == NULL) {
 | |
|  
 | |
|                  if (u->length == 0
 | |
| -                    || upstream->read->eof
 | |
| -                    || upstream->read->error)
 | |
| +                    || (upstream->read->eof
 | |
| +                        && u->length == -1
 | |
| +                        && u->pipe
 | |
| +                        && u->pipe->length <= 0))
 | |
|                  {
 | |
|                      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;
 | |
|              }
 | |
| @@ -2720,7 +2727,9 @@ ngx_http_upstream_process_request(ngx_ht
 | |
|  
 | |
|  #endif
 | |
|  
 | |
| -        if (p->upstream_done || p->upstream_eof || p->upstream_error) {
 | |
| +        if (p->upstream_done
 | |
| +            || (p->upstream_eof && u->length == -1 && p->length <= 0))
 | |
| +        {
 | |
|              ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
 | |
|                             "http upstream exit: %p", p->out);
 | |
|  #if 0
 | |
| @@ -2729,6 +2738,14 @@ ngx_http_upstream_process_request(ngx_ht
 | |
|              ngx_http_upstream_finalize_request(r, u, 0);
 | |
|              return;
 | |
|          }
 | |
| +
 | |
| +        if (p->upstream_eof || p->upstream_error) {
 | |
| +            ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
 | |
| +                           "http upstream exit: %p", p->out);
 | |
| +
 | |
| +            ngx_http_upstream_finalize_request(r, u, NGX_HTTP_BAD_GATEWAY);
 | |
| +            return;
 | |
| +       }
 | |
|      }
 | |
|  
 | |
|      if (p->downstream_error) {
 | |
| @@ -3087,9 +3104,9 @@ ngx_http_upstream_finalize_request(ngx_h
 | |
|  
 | |
|      if (u->header_sent
 | |
|          && rc != NGX_HTTP_REQUEST_TIME_OUT
 | |
| -        && (rc == NGX_ERROR || rc >= NGX_HTTP_SPECIAL_RESPONSE))
 | |
| +        && rc >= NGX_HTTP_SPECIAL_RESPONSE)
 | |
|      {
 | |
| -        rc = 0;
 | |
| +        rc = NGX_ERROR;
 | |
|      }
 | |
|  
 | |
|      if (rc == NGX_DECLINED) {
 |