summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikic@php.net>2017-01-07 22:54:16 +0100
committerNikita Popov <nikic@php.net>2017-01-07 22:54:16 +0100
commitbb2ab755555af61798c8584a166448119dcd9314 (patch)
tree6cb20ffa2c33a9331b899bee6a278cc4612ae375
parent201e56cd0453779fa483fa0f9d7aa42f1ca4a547 (diff)
parenta46bbdda2e082070bd67ecdc500d9671bf1ab823 (diff)
downloadphp-git-bb2ab755555af61798c8584a166448119dcd9314.tar.gz
Merge branch 'PHP-7.0' into PHP-7.1
-rw-r--r--main/fastcgi.c22
-rw-r--r--main/fastcgi.h3
-rw-r--r--sapi/fpm/fpm/fpm_main.c3
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;
}