diff options
| author | Maxim Dounin <mdounin@mdounin.ru> | 2012-09-24 18:34:04 +0000 |
|---|---|---|
| committer | Maxim Dounin <mdounin@mdounin.ru> | 2012-09-24 18:34:04 +0000 |
| commit | ce750db2339d2971202dbc536d4a36b6f5acc86c (patch) | |
| tree | 214a3130dfabe4cfbbb31f302768f066ae138d37 /src/http | |
| parent | 649cd3b401d37662d541aaf030fb0d90d1b43203 (diff) | |
| download | nginx-ce750db2339d2971202dbc536d4a36b6f5acc86c.tar.gz nginx-ce750db2339d2971202dbc536d4a36b6f5acc86c.tar.bz2 | |
Merge of r4778, r4782, r4783, r4824, r4830, r4834: minor fixes.
*) Reorder checks in ngx_shared_memory_add() for more consistent
error messages.
*) Added "const" to ngx_memcpy() with NGX_MEMCPY_LIMIT defined. This
fixes warning produced during compilation of the ngx_http_geoip_module
due to const qualifier being discarded.
*) Fixed possible use of old cached times if runtime went backwards.
If ngx_time_sigsafe_update() updated only ngx_cached_err_log_time, and
then clock was adjusted backwards, the cached_time[slot].sec might
accidentally match current seconds on next ngx_time_update() call,
resulting in various cached times not being updated.
Fix is to clear the cached_time[slot].sec to explicitly mark cached times
are stale and need updating.
*) Radix tree preallocation fix. The preallocation size was calculated
incorrectly and was always 8 due to sizeof(ngx_radix_tree_t) accidentally
used instead of sizeof(ngx_radix_node_t).
*) Fixed overflow if ngx_slab_alloc() is called with very big "size"
argument.
*) Write filter: replaced unneeded loop with one to free chains.
Noted by Gabor Lekeny.
Diffstat (limited to 'src/http')
| -rw-r--r-- | src/http/ngx_http_write_filter_module.c | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/src/http/ngx_http_write_filter_module.c b/src/http/ngx_http_write_filter_module.c index 72b1f9b2f..fd44bc659 100644 --- a/src/http/ngx_http_write_filter_module.c +++ b/src/http/ngx_http_write_filter_module.c @@ -185,18 +185,14 @@ ngx_http_write_filter(ngx_http_request_t *r, ngx_chain_t *in) } if (size == 0 && !(c->buffered & NGX_LOWLEVEL_BUFFERED)) { - if (last) { - r->out = NULL; - c->buffered &= ~NGX_HTTP_WRITE_BUFFERED; - - return NGX_OK; - } - - if (flush) { - do { - r->out = r->out->next; - } while (r->out); + if (last || flush) { + for (cl = r->out; cl; /* void */) { + ln = cl; + cl = cl->next; + ngx_free_chain(r->pool, ln); + } + r->out = NULL; c->buffered &= ~NGX_HTTP_WRITE_BUFFERED; return NGX_OK; |
