diff options
author | Nikita Popov <nikic@php.net> | 2017-01-07 22:54:16 +0100 |
---|---|---|
committer | Nikita Popov <nikic@php.net> | 2017-01-07 22:54:16 +0100 |
commit | bb2ab755555af61798c8584a166448119dcd9314 (patch) | |
tree | 6cb20ffa2c33a9331b899bee6a278cc4612ae375 | |
parent | 201e56cd0453779fa483fa0f9d7aa42f1ca4a547 (diff) | |
parent | a46bbdda2e082070bd67ecdc500d9671bf1ab823 (diff) | |
download | php-git-bb2ab755555af61798c8584a166448119dcd9314.tar.gz |
Merge branch 'PHP-7.0' into PHP-7.1
-rw-r--r-- | main/fastcgi.c | 22 | ||||
-rw-r--r-- | main/fastcgi.h | 3 | ||||
-rw-r--r-- | sapi/fpm/fpm/fpm_main.c | 3 |
3 files changed, 17 insertions, 11 deletions
diff --git a/main/fastcgi.c b/main/fastcgi.c index e5b9c5f904..0da9c3873e 100644 --- a/main/fastcgi.c +++ b/main/fastcgi.c @@ -216,7 +216,7 @@ struct _fcgi_request { #ifdef TCP_NODELAY int nodelay; #endif - int closed; + int ended; int in_len; int in_pad; @@ -1045,7 +1045,7 @@ static int fcgi_read_request(fcgi_request *req) unsigned char buf[FCGI_MAX_LENGTH+8]; req->keep = 0; - req->closed = 0; + req->ended = 0; req->in_len = 0; req->out_hdr = NULL; req->out_pos = req->out_buf; @@ -1506,7 +1506,7 @@ static inline void close_packet(fcgi_request *req) } } -int fcgi_flush(fcgi_request *req, int close) +int fcgi_flush(fcgi_request *req, int end) { int len; @@ -1514,7 +1514,7 @@ int fcgi_flush(fcgi_request *req, int close) len = (int)(req->out_pos - req->out_buf); - if (close) { + if (end) { fcgi_end_request_rec *rec = (fcgi_end_request_rec*)(req->out_pos); fcgi_make_header(&rec->hdr, FCGI_END_REQUEST, req->id, sizeof(fcgi_end_request)); @@ -1648,15 +1648,21 @@ int fcgi_write(fcgi_request *req, fcgi_request_type type, const char *str, int l return len; } +int fcgi_end(fcgi_request *req) { + int ret = 1; + if (!req->ended) { + ret = fcgi_flush(req, 1); + req->ended = 1; + } + return ret; +} + int fcgi_finish_request(fcgi_request *req, int force_close) { int ret = 1; if (req->fd >= 0) { - if (!req->closed) { - ret = fcgi_flush(req, 1); - req->closed = 1; - } + ret = fcgi_end(req); fcgi_close(req, force_close, 1); } return ret; diff --git a/main/fastcgi.h b/main/fastcgi.h index 4a454a003b..efadac61d2 100644 --- a/main/fastcgi.h +++ b/main/fastcgi.h @@ -118,7 +118,8 @@ void fcgi_loadenv(fcgi_request *req, fcgi_apply_func load_func, zval *array); int fcgi_read(fcgi_request *req, char *str, int len); int fcgi_write(fcgi_request *req, fcgi_request_type type, const char *str, int len); -int fcgi_flush(fcgi_request *req, int close); +int fcgi_flush(fcgi_request *req, int end); +int fcgi_end(fcgi_request *req); #ifdef PHP_WIN32 void fcgi_impersonate(void); diff --git a/sapi/fpm/fpm/fpm_main.c b/sapi/fpm/fpm/fpm_main.c index 29c838bced..3b33141aee 100644 --- a/sapi/fpm/fpm/fpm_main.c +++ b/sapi/fpm/fpm/fpm_main.c @@ -1534,11 +1534,10 @@ PHP_FUNCTION(fastcgi_finish_request) /* {{{ */ fcgi_request *request = (fcgi_request*) SG(server_context); if (!fcgi_is_closed(request)) { - php_output_end_all(); php_header(); - fcgi_flush(request, 1); + fcgi_end(request); fcgi_close(request, 0, 0); RETURN_TRUE; } |