Mercurial > hg > nginx-quic
changeset 758:86bb73dc8d40
fix <!--#include virtual=... wait="yes" -->
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Tue, 10 Oct 2006 14:30:39 +0000 |
parents | a138c4e6031f |
children | 1606be879985 |
files | src/http/modules/ngx_http_addition_filter_module.c src/http/modules/ngx_http_ssi_filter_module.c src/http/modules/ngx_http_ssi_filter_module.h src/http/ngx_http_core_module.c src/http/ngx_http_core_module.h |
diffstat | 5 files changed, 26 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/src/http/modules/ngx_http_addition_filter_module.c +++ b/src/http/modules/ngx_http_addition_filter_module.c @@ -124,6 +124,7 @@ ngx_http_addition_body_filter(ngx_http_r ngx_int_t rc; ngx_uint_t last; ngx_chain_t *cl; + ngx_http_request_t *sr; ngx_http_addition_ctx_t *ctx; ngx_http_addition_conf_t *conf; @@ -143,7 +144,7 @@ ngx_http_addition_body_filter(ngx_http_r ctx->before_body_sent = 1; if (conf->before_body.len) { - if (ngx_http_subrequest(r, &conf->before_body, NULL, NULL, 0) + if (ngx_http_subrequest(r, &conf->before_body, NULL, &sr, NULL, 0) == NGX_ERROR) { return NGX_ERROR; @@ -167,7 +168,9 @@ ngx_http_addition_body_filter(ngx_http_r return rc; } - if (ngx_http_subrequest(r, &conf->after_body, NULL, NULL, 0) == NGX_ERROR) { + if (ngx_http_subrequest(r, &conf->after_body, NULL, &sr, NULL, 0) + == NGX_ERROR) + { return NGX_ERROR; }
--- a/src/http/modules/ngx_http_ssi_filter_module.c +++ b/src/http/modules/ngx_http_ssi_filter_module.c @@ -417,10 +417,11 @@ ngx_http_ssi_body_filter(ngx_http_reques return NGX_AGAIN; } - ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, - "http ssi filter \"%V\" continue", &r->uri); - - ctx->wait = 0; + 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); @@ -1814,6 +1815,7 @@ ngx_http_ssi_include(ngx_http_request_t ngx_buf_t *b; ngx_uint_t flags, i; ngx_chain_t *out, *cl, *tl, **ll; + ngx_http_request_t *sr; ngx_http_ssi_ctx_t *mctx; ngx_http_ssi_block_t *bl; @@ -1936,7 +1938,7 @@ ngx_http_ssi_include(ngx_http_request_t } } - rc = ngx_http_subrequest(r, uri, &args, out, flags); + rc = ngx_http_subrequest(r, uri, &args, &sr, out, flags); if (rc == NGX_ERROR) { return NGX_HTTP_SSI_ERROR; @@ -1947,7 +1949,13 @@ ngx_http_ssi_include(ngx_http_request_t } if (rc == NGX_AGAIN) { - ctx->wait = 1; + if (ctx->wait == NULL) { + ctx->wait = sr; + + } else { + ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, + "only one subrequest may be waited at the same time"); + } } return rc;
--- a/src/http/modules/ngx_http_ssi_filter_module.h +++ b/src/http/modules/ngx_http_ssi_filter_module.h @@ -63,8 +63,8 @@ typedef struct { unsigned block:1; unsigned output:1; unsigned output_chosen:1; - unsigned wait:1; + ngx_http_request_t *wait; void *value_buf; ngx_str_t timefmt; ngx_str_t errmsg;
--- a/src/http/ngx_http_core_module.c +++ b/src/http/ngx_http_core_module.c @@ -1283,7 +1283,8 @@ ngx_http_auth_basic_user(ngx_http_reques ngx_int_t ngx_http_subrequest(ngx_http_request_t *r, - ngx_str_t *uri, ngx_str_t *args, ngx_chain_t *out, ngx_uint_t flags) + ngx_str_t *uri, ngx_str_t *args, ngx_http_request_t **psr, + ngx_chain_t *out, ngx_uint_t flags) { ngx_connection_t *c; ngx_http_request_t *sr; @@ -1417,6 +1418,8 @@ ngx_http_subrequest(ngx_http_request_t * ngx_log_debug2(NGX_LOG_DEBUG_HTTP, c->log, 0, "http subrequest done \"%V?%V\"", uri, &sr->args); + *psr = sr; + if (sr->fast_subrequest) { sr->fast_subrequest = 0;
--- a/src/http/ngx_http_core_module.h +++ b/src/http/ngx_http_core_module.h @@ -305,7 +305,8 @@ u_char *ngx_http_map_uri_to_path(ngx_htt ngx_int_t ngx_http_auth_basic_user(ngx_http_request_t *r); ngx_int_t ngx_http_subrequest(ngx_http_request_t *r, - ngx_str_t *uri, ngx_str_t *args, ngx_chain_t *out, ngx_uint_t flags); + ngx_str_t *uri, ngx_str_t *args, ngx_http_request_t **sr, + ngx_chain_t *out, ngx_uint_t flags); ngx_int_t ngx_http_internal_redirect(ngx_http_request_t *r, ngx_str_t *uri, ngx_str_t *args);