diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/http/modules/ngx_http_limit_zone_module.c | 6 | ||||
-rw-r--r-- | src/http/ngx_http_request.h | 6 |
2 files changed, 12 insertions, 0 deletions
diff --git a/src/http/modules/ngx_http_limit_zone_module.c b/src/http/modules/ngx_http_limit_zone_module.c index 218c0de7f..e262a8176 100644 --- a/src/http/modules/ngx_http_limit_zone_module.c +++ b/src/http/modules/ngx_http_limit_zone_module.c @@ -107,6 +107,10 @@ ngx_http_limit_zone_handler(ngx_http_request_t *r) ngx_http_limit_zone_conf_t *lzcf; ngx_http_limit_zone_cleanup_t *lzcln; + if (r->limit_zone_set) { + return NGX_DECLINED; + } + lzcf = ngx_http_get_module_loc_conf(r, ngx_http_limit_zone_module); if (lzcf->shm_zone == NULL) { @@ -119,6 +123,8 @@ ngx_http_limit_zone_handler(ngx_http_request_t *r) return NGX_DECLINED; } + r->limit_zone_set = 1; + len = vv->len; hash = ngx_crc32_short(vv->data, len); diff --git a/src/http/ngx_http_request.h b/src/http/ngx_http_request.h index 25f07b109..5cdcb9498 100644 --- a/src/http/ngx_http_request.h +++ b/src/http/ngx_http_request.h @@ -430,6 +430,12 @@ struct ngx_http_request_s { #endif + /* + * instead of using the request context data in ngx_http_limit_zone_module + * we use the single bit in the request structure + */ + unsigned limit_zone_set:1; + #if 0 unsigned cachable:1; #endif |