From: Xinchen Hui Date: Sat, 23 May 2015 17:07:36 +0000 (+0800) Subject: Avoid multipy allocating of request env X-Git-Tag: PRE_PHP7_NSAPI_REMOVAL~39 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f20118aa669f9992fee8a64024e623805669391b;p=php Avoid multipy allocating of request env --- diff --git a/main/fastcgi.c b/main/fastcgi.c index 356aa1d56d..7ca3731fce 100644 --- a/main/fastcgi.c +++ b/main/fastcgi.c @@ -794,10 +794,17 @@ fcgi_request *fcgi_init_request(fcgi_request *req, int listen_socket) #ifdef _WIN32 req->tcp = !GetNamedPipeInfo((HANDLE)_get_osfhandle(req->listen_socket), NULL, NULL, NULL, NULL); #endif + fcgi_hash_init(&req->env); return req; } +void fcgi_destroy_request(fcgi_request *req) { + if (req->env.buckets) { + fcgi_hash_destroy(&req->env); + } +} + static inline ssize_t safe_write(fcgi_request *req, const void *buf, size_t count) { int ret; @@ -935,7 +942,6 @@ static int fcgi_read_request(fcgi_request *req) req->in_len = 0; req->out_hdr = NULL; req->out_pos = req->out_buf; - fcgi_hash_init(&req->env); req->has_env = 1; if (safe_read(req, &hdr, sizeof(fcgi_header)) != sizeof(fcgi_header) || @@ -1144,7 +1150,6 @@ void fcgi_close(fcgi_request *req, int force, int destroy) { if (destroy && req->has_env) { fcgi_hash_clean(&req->env); - fcgi_hash_destroy(&req->env); req->has_env = 0; } diff --git a/main/fastcgi.h b/main/fastcgi.h index 079c25a011..cd18038986 100644 --- a/main/fastcgi.h +++ b/main/fastcgi.h @@ -195,6 +195,7 @@ int fcgi_in_shutdown(void); void fcgi_terminate(void); int fcgi_listen(const char *path, int backlog); fcgi_request* fcgi_init_request(fcgi_request *request, int listen_socket); +void fcgi_destroy_request(fcgi_request *req); void fcgi_set_allowed_clients(char *ip); int fcgi_accept_request(fcgi_request *req); int fcgi_finish_request(fcgi_request *req, int force_close); diff --git a/sapi/cgi/cgi_main.c b/sapi/cgi/cgi_main.c index fd8f665936..e7b5722368 100644 --- a/sapi/cgi/cgi_main.c +++ b/sapi/cgi/cgi_main.c @@ -2101,6 +2101,7 @@ consult the installation file that came with this distribution, or visit \n\ break; case 'h': case '?': + fcgi_destroy_request(&request); fcgi_shutdown(); no_headers = 1; SG(headers_sent) = 1; @@ -2532,6 +2533,7 @@ fastcgi_request_done: } /* end of fastcgi loop */ } + fcgi_destroy_request(&request); fcgi_shutdown(); if (cgi_sapi_module.php_ini_path_override) { diff --git a/sapi/fpm/fpm/fpm_main.c b/sapi/fpm/fpm/fpm_main.c index 02ca575ca7..373aee5def 100644 --- a/sapi/fpm/fpm/fpm_main.c +++ b/sapi/fpm/fpm/fpm_main.c @@ -1972,6 +1972,7 @@ fastcgi_request_done: } /* end of fastcgi loop */ } + fcgi_destroy_request(&request); fcgi_shutdown(); if (cgi_sapi_module.php_ini_path_override) {