Mercurial > hg > nginx
comparison src/http/ngx_http_upstream.c @ 5594:c8a14fbd3ce9 stable-1.4
Upstream: ngx_post_event() instead of upgraded call (ticket #503).
If a request is finalized in the first call to the
ngx_http_upstream_process_upgraded() function, e.g., because upstream
server closed the connection for some reason, in the second call
the u->peer.connection pointer will be null, resulting in segmentation
fault.
Fix is to avoid second direct call, and post event instead. This ensures
that ngx_http_upstream_process_upgraded() won't be called again if
a request is finalized.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Tue, 18 Feb 2014 17:30:40 +0400 |
parents | 560de9681661 |
children |
comparison
equal
deleted
inserted
replaced
5593:7a7c6104b474 | 5594:c8a14fbd3ce9 |
---|---|
2454 } | 2454 } |
2455 | 2455 |
2456 if (u->peer.connection->read->ready | 2456 if (u->peer.connection->read->ready |
2457 || u->buffer.pos != u->buffer.last) | 2457 || u->buffer.pos != u->buffer.last) |
2458 { | 2458 { |
2459 ngx_post_event(c->read, &ngx_posted_events); | |
2459 ngx_http_upstream_process_upgraded(r, 1, 1); | 2460 ngx_http_upstream_process_upgraded(r, 1, 1); |
2461 return; | |
2460 } | 2462 } |
2461 | 2463 |
2462 ngx_http_upstream_process_upgraded(r, 0, 1); | 2464 ngx_http_upstream_process_upgraded(r, 0, 1); |
2463 } | 2465 } |
2464 | 2466 |