diff src/http/modules/ngx_http_index_module.c @ 112:408f195b3482 NGINX_0_3_3

nginx 0.3.3 *) Change: the "bl" and "af" parameters of the "listen" directive was renamed to the "backlog" and "accept_filter". *) Feature: the "rcvbuf" and "sndbuf" parameters of the "listen" directive. *) Change: the "$msec" log parameter does not require now the additional the gettimeofday() system call. *) Feature: the -t switch now tests the "listen" directives. *) Bugfix: if the invalid address was specified in the "listen" directive, then after the -HUP signal nginx left an open socket in the CLOSED state. *) Bugfix: the mime type may be incorrectly set to default value for index file with variable in the name; bug appeared in 0.3.0. *) Feature: the "timer_resolution" directive. *) Feature: the millisecond "$upstream_response_time" log parameter. *) Bugfix: a temporary file with client request body now is removed just after the response header was transferred to a client. *) Bugfix: OpenSSL 0.9.6 compatibility. *) Bugfix: the SSL certificate and key file paths could not be relative. *) Bugfix: the "ssl_prefer_server_ciphers" directive did not work in the ngx_imap_ssl_module. *) Bugfix: the "ssl_protocols" directive allowed to specify the single protocol only.
author Igor Sysoev <http://sysoev.ru>
date Wed, 19 Oct 2005 00:00:00 +0400
parents 45f7329b4bd0
children d25a1d6034f1
line wrap: on
line diff
--- a/src/http/modules/ngx_http_index_module.c
+++ b/src/http/modules/ngx_http_index_module.c
@@ -126,7 +126,8 @@ ngx_http_index_handler(ngx_http_request_
     ngx_uint_t                    i;
     ngx_http_index_t             *index;
     ngx_http_index_ctx_t         *ctx;
-    ngx_pool_cleanup_file_t      *cln;
+    ngx_pool_cleanup_t           *cln;
+    ngx_pool_cleanup_file_t      *clnf;
     ngx_http_script_code_pt       code;
     ngx_http_script_engine_t      e;
     ngx_http_core_loc_conf_t     *clcf;
@@ -180,9 +181,9 @@ ngx_http_index_handler(ngx_http_request_
             e.ip = index[i].lengths->elts;
             e.request = r;
 
-            /* 1 byte for terminating '\0' and 4 bytes is preallocation */
+            /* 1 byte for terminating '\0' */
 
-            len = 1 + 4;
+            len = 1;
 
             while (*(uintptr_t *) e.ip) {
                 lcode = *(ngx_http_script_len_code_pt *) e.ip;
@@ -190,6 +191,10 @@ ngx_http_index_handler(ngx_http_request_
             }
 
             ctx->index.len = len;
+
+            /* 16 bytes are preallocation */
+
+            len += 16;
         }
 
         if (len > ctx->path.len) {
@@ -228,6 +233,11 @@ ngx_http_index_handler(ngx_http_request_
         ngx_log_debug1(NGX_LOG_DEBUG_HTTP, log, 0,
                        "open index \"%s\"", ctx->path.data);
 
+        cln = ngx_pool_cleanup_add(r->pool, sizeof(ngx_pool_cleanup_file_t));
+        if (cln == NULL) {
+            return NGX_HTTP_INTERNAL_SERVER_ERROR;
+        }
+
         fd = ngx_open_file(ctx->path.data, NGX_FILE_RDONLY, NGX_FILE_OPEN);
 
         if (fd == (ngx_fd_t) NGX_AGAIN) {
@@ -268,19 +278,12 @@ ngx_http_index_handler(ngx_http_request_
             return NGX_HTTP_INTERNAL_SERVER_ERROR;
         }
 
-
-        cln = ngx_palloc(r->pool, sizeof(ngx_pool_cleanup_file_t));
-        if (cln == NULL) {
-            return NGX_HTTP_INTERNAL_SERVER_ERROR; 
-        }
+        cln->handler = ngx_pool_cleanup_file;
+        clnf = cln->data;
 
-        cln->fd = fd;
-        cln->name = ctx->path.data;
-        cln->log = r->pool->log;
-
-        if (ngx_pool_cleanup_add(r->pool, ngx_pool_cleanup_file, cln) == NULL) {
-            return NGX_HTTP_INTERNAL_SERVER_ERROR;
-        }
+        clnf->fd = fd;
+        clnf->name = ctx->path.data;
+        clnf->log = r->pool->log;
 
         clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);