# HG changeset patch # User Igor Sysoev # Date 1160577218 0 # Node ID cad7543dc41982c7345f36d9ef8a580cfe24efc7 # Parent 791ea37bc944ab8c1aad9cfb46885e706af0b9a3 fix r766 did not fix the bug too diff --git a/src/http/modules/ngx_http_ssi_filter_module.c b/src/http/modules/ngx_http_ssi_filter_module.c --- a/src/http/modules/ngx_http_ssi_filter_module.c +++ b/src/http/modules/ngx_http_ssi_filter_module.c @@ -383,6 +383,7 @@ ngx_http_ssi_body_filter(ngx_http_reques 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 @@ ngx_http_ssi_body_filter(ngx_http_reques } 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);