Avoid multipy allocating of request env

This commit is contained in:
Xinchen Hui 2015-05-24 01:07:36 +08:00
parent 86de98caba
commit f20118aa66
4 changed files with 11 additions and 2 deletions

View file

@ -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;
}

View file

@ -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);

View file

@ -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) {

View file

@ -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) {