summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuslan Ermilov <ru@nginx.com>2019-12-16 15:19:01 +0300
committerRuslan Ermilov <ru@nginx.com>2019-12-16 15:19:01 +0300
commitbe45a3aa590a5f7e64c6d55e8e0f78565adf4823 (patch)
treea31f998e08752cce80fa9178baf885bf3c4957b7
parent6dc0c880e5b94dc507795369196dec5c2f9d2cc2 (diff)
downloadnginx-be45a3aa590a5f7e64c6d55e8e0f78565adf4823.tar.gz
Saved some memory allocations.
In configurations when "root" has variables, some modules unnecessarily allocated memory for the "Location" header value.
-rw-r--r--src/http/modules/ngx_http_dav_module.c31
-rw-r--r--src/http/modules/ngx_http_static_module.c4
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 = '/';