diff options
Diffstat (limited to 'main/fastcgi.c')
-rw-r--r-- | main/fastcgi.c | 22 |
1 files changed, 14 insertions, 8 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; |