dmitry Fri Feb 15 14:45:42 2008 UTC Modified files: (Branch: PHP_5_3) /php-src/sapi/cgi cgi_main.c fastcgi.c Log: optimization http://cvs.php.net/viewvc.cgi/php-src/sapi/cgi/cgi_main.c?r1=1.267.2.15.2.50.2.11&r2=1.267.2.15.2.50.2.12&diff_format=u Index: php-src/sapi/cgi/cgi_main.c diff -u php-src/sapi/cgi/cgi_main.c:1.267.2.15.2.50.2.11 php-src/sapi/cgi/cgi_main.c:1.267.2.15.2.50.2.12 --- php-src/sapi/cgi/cgi_main.c:1.267.2.15.2.50.2.11 Mon Dec 31 07:17:18 2007 +++ php-src/sapi/cgi/cgi_main.c Fri Feb 15 14:45:42 2008 @@ -21,7 +21,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: cgi_main.c,v 1.267.2.15.2.50.2.11 2007/12/31 07:17:18 sebastian Exp $ */ +/* $Id: cgi_main.c,v 1.267.2.15.2.50.2.12 2008/02/15 14:45:42 dmitry Exp $ */ #include "php.h" #include "php_globals.h" @@ -756,7 +756,17 @@ 2. When the first call occurs and the request is not set up, flush fails on FastCGI. */ if (SG(sapi_started)) { - sapi_cgibin_flush(SG(server_context)); + if (fcgi_is_fastcgi()) { + if ( +#ifndef PHP_WIN32 + !parent && +#endif + !fcgi_finish_request((fcgi_request*)SG(server_context))) { + php_handle_aborted_connection(); + } + } else { + sapi_cgibin_flush(SG(server_context)); + } } return SUCCESS; } http://cvs.php.net/viewvc.cgi/php-src/sapi/cgi/fastcgi.c?r1=1.4.2.13.2.28.2.1&r2=1.4.2.13.2.28.2.2&diff_format=u Index: php-src/sapi/cgi/fastcgi.c diff -u php-src/sapi/cgi/fastcgi.c:1.4.2.13.2.28.2.1 php-src/sapi/cgi/fastcgi.c:1.4.2.13.2.28.2.2 --- php-src/sapi/cgi/fastcgi.c:1.4.2.13.2.28.2.1 Mon Dec 31 07:17:18 2007 +++ php-src/sapi/cgi/fastcgi.c Fri Feb 15 14:45:42 2008 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: fastcgi.c,v 1.4.2.13.2.28.2.1 2007/12/31 07:17:18 sebastian Exp $ */ +/* $Id: fastcgi.c,v 1.4.2.13.2.28.2.2 2008/02/15 14:45:42 dmitry Exp $ */ #include "php.h" #include "fastcgi.h" @@ -632,7 +632,7 @@ } memcpy(tmp, p, name_len); tmp[name_len] = 0; - s = zend_strndup((char*)p + name_len, val_len); + s = estrndup((char*)p + name_len, val_len); zend_hash_update(&req->env, tmp, name_len+1, &s, sizeof(char*), NULL); p += name_len + val_len; } @@ -644,7 +644,7 @@ static void fcgi_free_var(char **s) { - free(*s); + efree(*s); } static int fcgi_read_request(fcgi_request *req) @@ -657,7 +657,7 @@ req->in_len = 0; req->out_hdr = NULL; req->out_pos = req->out_buf; - zend_hash_init(&req->env, 0, NULL, (void (*)(void *)) fcgi_free_var, 1); + zend_hash_init(&req->env, 0, NULL, (void (*)(void *)) fcgi_free_var, 0); if (safe_read(req, &hdr, sizeof(fcgi_header)) != sizeof(fcgi_header) || hdr.version < FCGI_VERSION_1) { @@ -693,15 +693,15 @@ req->keep = (((fcgi_begin_request*)buf)->flags & FCGI_KEEP_CONN); switch ((((fcgi_begin_request*)buf)->roleB1 << 8) + ((fcgi_begin_request*)buf)->roleB0) { case FCGI_RESPONDER: - val = strdup("RESPONDER"); + val = estrdup("RESPONDER"); zend_hash_update(&req->env, "FCGI_ROLE", sizeof("FCGI_ROLE"), &val, sizeof(char*), NULL); break; case FCGI_AUTHORIZER: - val = strdup("AUTHORIZER"); + val = estrdup("AUTHORIZER"); zend_hash_update(&req->env, "FCGI_ROLE", sizeof("FCGI_ROLE"), &val, sizeof(char*), NULL); break; case FCGI_FILTER: - val = strdup("FILTER"); + val = estrdup("FILTER"); zend_hash_update(&req->env, "FCGI_ROLE", sizeof("FCGI_ROLE"), &val, sizeof(char*), NULL); break; default: @@ -1168,11 +1168,13 @@ int fcgi_finish_request(fcgi_request *req) { + int ret = 1; + if (req->fd >= 0) { - fcgi_flush(req, 1); + ret = fcgi_flush(req, 1); fcgi_close(req, 0, 1); } - return 1; + return ret; } char* fcgi_getenv(fcgi_request *req, const char* var, int var_len) @@ -1195,7 +1197,7 @@ } else { char **ret; - val = strdup(val); + val = estrdup(val); if (zend_hash_update(&req->env, var, var_len+1, &val, sizeof(char*), (void**)&ret) == SUCCESS) { return *ret; }
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php