com php-src: Avoid multipy allocating of request env: main/fastcgi.c main/fastcgi.h sapi/cgi/cgi_main.c sapi/fpm/fpm/fpm_mai n.c
| From: | Xinchen Hui | Date: | Sat, 23 May 2015 17:07:36 +0000 |
| Subject: | com php-src: Avoid multipy allocating of request env: main/fastcgi.c main/fastcgi.h sapi/cgi/cgi_main.c sapi/fpm/fpm/fpm_mai n.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-86955@lists.php.net to get a copy of this message | ||
Commit: f20118aa669f9992fee8a64024e623805669391b
Author: Xinchen Hui <laruence@gmail.com> Sun, 24 May 2015 01:07:36 +0800
Parents: 86de98cabada88f4667839794c176ea37648498b
Branches: master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=f20118aa669f9992fee8a64024e623805669391b
Log:
Avoid multipy allocating of request env
Changed paths:
M main/fastcgi.c
M main/fastcgi.h
M sapi/cgi/cgi_main.c
M sapi/fpm/fpm/fpm_main.c
Diff:
diff --git a/main/fastcgi.c b/main/fastcgi.c
index 356aa1d..7ca3731 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 079c25a..cd18038 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 fd8f665..e7b5722 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 02ca575..373aee5 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) {