From be45a3aa590a5f7e64c6d55e8e0f78565adf4823 Mon Sep 17 00:00:00 2001 From: Ruslan Ermilov Date: Mon, 16 Dec 2019 15:19:01 +0300 Subject: Saved some memory allocations. In configurations when "root" has variables, some modules unnecessarily allocated memory for the "Location" header value. --- src/http/modules/ngx_http_dav_module.c | 31 +++++-------------------------- src/http/modules/ngx_http_static_module.c | 4 ++-- 2 files changed, 7 insertions(+), 28 deletions(-) diff --git a/src/http/modules/ngx_http_dav_module.c b/src/http/modules/ngx_http_dav_module.c index 105a607ae..59ad2cedf 100644 --- a/src/http/modules/ngx_http_dav_module.c +++ b/src/http/modules/ngx_http_dav_module.c @@ -56,7 +56,7 @@ static ngx_int_t ngx_http_dav_copy_tree_file(ngx_tree_ctx_t *ctx, static ngx_int_t ngx_http_dav_depth(ngx_http_request_t *r, ngx_int_t dflt); static ngx_int_t ngx_http_dav_error(ngx_log_t *log, ngx_err_t err, ngx_int_t not_found, char *failed, u_char *path); -static ngx_int_t ngx_http_dav_location(ngx_http_request_t *r, u_char *path); +static ngx_int_t ngx_http_dav_location(ngx_http_request_t *r); static void *ngx_http_dav_create_loc_conf(ngx_conf_t *cf); static char *ngx_http_dav_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child); @@ -285,7 +285,7 @@ ngx_http_dav_put_handler(ngx_http_request_t *r) } if (status == NGX_HTTP_CREATED) { - if (ngx_http_dav_location(r, path.data) != NGX_OK) { + if (ngx_http_dav_location(r) != NGX_OK) { ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR); return; } @@ -520,9 +520,7 @@ ngx_http_dav_mkcol_handler(ngx_http_request_t *r, ngx_http_dav_loc_conf_t *dlcf) if (ngx_create_dir(path.data, ngx_dir_access(dlcf->access)) != NGX_FILE_ERROR) { - *(p - 1) = '/'; - - if (ngx_http_dav_location(r, path.data) != NGX_OK) { + if (ngx_http_dav_location(r) != NGX_OK) { return NGX_HTTP_INTERNAL_SERVER_ERROR; } @@ -1070,35 +1068,16 @@ ngx_http_dav_error(ngx_log_t *log, ngx_err_t err, ngx_int_t not_found, static ngx_int_t -ngx_http_dav_location(ngx_http_request_t *r, u_char *path) +ngx_http_dav_location(ngx_http_request_t *r) { - u_char *location; - ngx_http_core_loc_conf_t *clcf; - r->headers_out.location = ngx_list_push(&r->headers_out.headers); if (r->headers_out.location == NULL) { return NGX_ERROR; } - clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module); - - if (!clcf->alias && clcf->root_lengths == NULL) { - location = path + clcf->root.len; - - } else { - location = ngx_pnalloc(r->pool, r->uri.len); - if (location == NULL) { - ngx_http_clear_location(r); - return NGX_ERROR; - } - - ngx_memcpy(location, r->uri.data, r->uri.len); - } - r->headers_out.location->hash = 1; ngx_str_set(&r->headers_out.location->key, "Location"); - r->headers_out.location->value.len = r->uri.len; - r->headers_out.location->value.data = location; + r->headers_out.location->value = r->uri; return NGX_OK; } diff --git a/src/http/modules/ngx_http_static_module.c b/src/http/modules/ngx_http_static_module.c index 0e16c05a5..282d6ee98 100644 --- a/src/http/modules/ngx_http_static_module.c +++ b/src/http/modules/ngx_http_static_module.c @@ -157,8 +157,8 @@ ngx_http_static_handler(ngx_http_request_t *r) len = r->uri.len + 1; - if (!clcf->alias && clcf->root_lengths == NULL && r->args.len == 0) { - location = path.data + clcf->root.len; + if (!clcf->alias && r->args.len == 0) { + location = path.data + root; *last = '/'; -- cgit v1.2.1