Mercurial > hg > nginx
changeset 767:cad7543dc419
fix <!--#include virtual=... wait="yes" -->
r766 did not fix the bug too
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Wed, 11 Oct 2006 14:33:38 +0000 |
parents | 791ea37bc944 |
children | 0f404f82a134 |
files | src/http/modules/ngx_http_ssi_filter_module.c |
diffstat | 1 files changed, 24 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/src/http/modules/ngx_http_ssi_filter_module.c Wed Oct 11 12:47:11 2006 +0000 +++ b/src/http/modules/ngx_http_ssi_filter_module.c Wed Oct 11 14:33:38 2006 +0000 @@ -383,6 +383,7 @@ ngx_chain_t *cl, **ll; ngx_table_elt_t *param; ngx_connection_t *c; + ngx_http_request_t *pr; ngx_http_ssi_ctx_t *ctx, *mctx; ngx_http_ssi_block_t *bl; ngx_http_ssi_param_t *prm; @@ -411,16 +412,34 @@ } if (ctx->wait) { - if (ctx->wait != r) { + if (r->connection->data != r) { ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, "http ssi filter \"%V\" wait", &r->uri); return NGX_AGAIN; } - ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, - "http ssi filter \"%V\" continue", &r->uri); - - ctx->wait = NULL; + for (pr = ctx->wait->parent; pr; pr = pr->parent) { + if (pr == r) { + ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, + "http ssi filter \"%V\" flush", &r->uri); + + rc = ngx_http_next_body_filter(r, NULL); + + if (ctx->wait->done) { + ctx->wait = NULL; + } + + if (rc == NGX_ERROR || rc == NGX_AGAIN) { + return rc; + } + } + } + + if (ctx->wait == r) { + ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, + "http ssi filter \"%V\" continue", &r->uri); + ctx->wait = NULL; + } } slcf = ngx_http_get_module_loc_conf(r, ngx_http_ssi_filter_module);