Mercurial > hg > nginx
changeset 2821:26e06e009ced
allow to pass image filter errors via the same location where the filter is set
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Fri, 08 May 2009 14:52:50 +0000 |
parents | 5eb4e2d2e9fa |
children | 5364c3419a62 |
files | src/http/modules/ngx_http_image_filter_module.c src/http/modules/ngx_http_xslt_filter_module.c src/http/ngx_http.h src/http/ngx_http_special_response.c |
diffstat | 4 files changed, 25 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/src/http/modules/ngx_http_image_filter_module.c +++ b/src/http/modules/ngx_http_image_filter_module.c @@ -181,6 +181,13 @@ ngx_http_image_header_filter(ngx_http_re return NGX_ERROR; } + ctx = ngx_http_get_module_ctx(r, ngx_http_image_filter_module); + + if (ctx) { + ngx_http_set_ctx(r, NULL, ngx_http_image_filter_module); + return ngx_http_next_header_filter(r); + } + ctx = ngx_pcalloc(r->pool, sizeof(ngx_http_image_filter_ctx_t)); if (ctx == NULL) { return NGX_ERROR; @@ -258,6 +265,7 @@ ngx_http_image_body_filter(ngx_http_requ } return ngx_http_filter_finalize_request(r, + &ngx_http_image_filter_module, NGX_HTTP_UNSUPPORTED_MEDIA_TYPE); } @@ -287,6 +295,7 @@ ngx_http_image_body_filter(ngx_http_requ if (rc == NGX_ERROR) { return ngx_http_filter_finalize_request(r, + &ngx_http_image_filter_module, NGX_HTTP_UNSUPPORTED_MEDIA_TYPE); } @@ -298,6 +307,7 @@ ngx_http_image_body_filter(ngx_http_requ if (out.buf == NULL) { return ngx_http_filter_finalize_request(r, + &ngx_http_image_filter_module, NGX_HTTP_UNSUPPORTED_MEDIA_TYPE); }
--- a/src/http/modules/ngx_http_xslt_filter_module.c +++ b/src/http/modules/ngx_http_xslt_filter_module.c @@ -319,7 +319,7 @@ ngx_http_xslt_send(ngx_http_request_t *r ctx->done = 1; if (b == NULL) { - return ngx_http_filter_finalize_request(r, + return ngx_http_filter_finalize_request(r, NULL, NGX_HTTP_INTERNAL_SERVER_ERROR); } @@ -327,7 +327,7 @@ ngx_http_xslt_send(ngx_http_request_t *r if (cln == NULL) { ngx_free(b->pos); - return ngx_http_filter_finalize_request(r, + return ngx_http_filter_finalize_request(r, NULL, NGX_HTTP_INTERNAL_SERVER_ERROR); }
--- a/src/http/ngx_http.h +++ b/src/http/ngx_http.h @@ -104,7 +104,7 @@ ngx_int_t ngx_http_send_header(ngx_http_ ngx_int_t ngx_http_special_response_handler(ngx_http_request_t *r, ngx_int_t error); ngx_int_t ngx_http_filter_finalize_request(ngx_http_request_t *r, - ngx_int_t error); + ngx_module_t *m, ngx_int_t error); void ngx_http_clean_header(ngx_http_request_t *r);
--- a/src/http/ngx_http_special_response.c +++ b/src/http/ngx_http_special_response.c @@ -446,15 +446,25 @@ ngx_http_special_response_handler(ngx_ht ngx_int_t -ngx_http_filter_finalize_request(ngx_http_request_t *r, ngx_int_t error) +ngx_http_filter_finalize_request(ngx_http_request_t *r, ngx_module_t *m, + ngx_int_t error) { - ngx_int_t rc; + void *ctx; + ngx_int_t rc; ngx_http_clean_header(r); + if (m) { + ctx = r->ctx[m->ctx_index]; + } + /* clear the modules contexts */ ngx_memzero(r->ctx, sizeof(void *) * ngx_http_max_module); + if (m) { + r->ctx[m->ctx_index] = ctx; + } + r->filter_finalize = 1; rc = ngx_http_special_response_handler(r, error);