From ccf051c317e606c2a4d9099c6e79a5c42bfdb298 Mon Sep 17 00:00:00 2001 From: George Wang Date: Sun, 21 Apr 2019 14:59:51 -0400 Subject: [PATCH 1/2] Fixed bug in litespeed_finish_request(), disable fastcgi_finish_request() alias for now. --- sapi/litespeed/lsapi_main.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/sapi/litespeed/lsapi_main.c b/sapi/litespeed/lsapi_main.c index 0c98b2bdb1b..dd50e448deb 100644 --- a/sapi/litespeed/lsapi_main.c +++ b/sapi/litespeed/lsapi_main.c @@ -466,7 +466,7 @@ static int sapi_lsapi_activate() static sapi_module_struct lsapi_sapi_module = { "litespeed", - "LiteSpeed V7.3", + "LiteSpeed V7.3.1", php_lsapi_startup, /* startup */ php_module_shutdown_wrapper, /* shutdown */ @@ -1406,7 +1406,6 @@ zend_function_entry litespeed_functions[] = { PHP_FALIAS(getallheaders, litespeed_request_headers, arginfo_litespeed__void) PHP_FALIAS(apache_request_headers, litespeed_request_headers, arginfo_litespeed__void) PHP_FALIAS(apache_response_headers, litespeed_response_headers, arginfo_litespeed__void) - PHP_FALIAS(fastcgi_finish_request, litespeed_finish_request, arginfo_litespeed__void) {NULL, NULL, NULL} }; @@ -1542,6 +1541,10 @@ PHP_FUNCTION(litespeed_finish_request) if (ZEND_NUM_ARGS() > 0) { WRONG_PARAM_COUNT; } + + php_output_end_all(); + php_header(); + if (LSAPI_End_Response() != -1) { RETURN_TRUE; } From ce73841cdcfd86a2cf5d7e1c251095254985324d Mon Sep 17 00:00:00 2001 From: George Wang Date: Sun, 21 Apr 2019 15:04:54 -0400 Subject: [PATCH 2/2] Improved LSAPI_End_Response_r() . --- sapi/litespeed/lsapilib.c | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/sapi/litespeed/lsapilib.c b/sapi/litespeed/lsapilib.c index 371bc6b0e3c..88a30a7f6a5 100644 --- a/sapi/litespeed/lsapilib.c +++ b/sapi/litespeed/lsapilib.c @@ -1600,8 +1600,11 @@ int LSAPI_Accept_r( LSAPI_Request * pReq ) } -static struct lsapi_packet_header finish = {'L', 'S', - LSAPI_RESP_END, LSAPI_ENDIAN, {LSAPI_PACKET_HEADER_LEN} }; +static struct lsapi_packet_header finish_close[2] = +{ + {'L', 'S', LSAPI_RESP_END, LSAPI_ENDIAN, {LSAPI_PACKET_HEADER_LEN} }, + {'L', 'S', LSAPI_CONN_CLOSE, LSAPI_ENDIAN, {LSAPI_PACKET_HEADER_LEN} } +}; int LSAPI_Finish_r( LSAPI_Request * pReq ) @@ -1622,7 +1625,7 @@ int LSAPI_Finish_r( LSAPI_Request * pReq ) Flush_RespBuf_r( pReq ); } - pReq->m_pIovecCur->iov_base = (void *)&finish; + pReq->m_pIovecCur->iov_base = (void *)finish_close; pReq->m_pIovecCur->iov_len = LSAPI_PACKET_HEADER_LEN; pReq->m_totalLen += LSAPI_PACKET_HEADER_LEN; ++pReq->m_pIovecCur; @@ -1638,12 +1641,17 @@ int LSAPI_End_Response_r(LSAPI_Request * pReq) { if (!pReq) return -1; + if (pReq->m_reqState & LSAPI_ST_BACKGROUND) + return 0; if (pReq->m_reqState) { if ( pReq->m_fd != -1 ) { if ( pReq->m_reqState & LSAPI_ST_RESP_HEADER ) { + if ( pReq->m_pRespHeaderBufPos <= pReq->m_pRespHeaderBuf ) + return 0; + LSAPI_FinalizeRespHeaders_r( pReq ); } if ( pReq->m_pRespBufPos != pReq->m_pRespBuf ) @@ -1651,14 +1659,13 @@ int LSAPI_End_Response_r(LSAPI_Request * pReq) Flush_RespBuf_r( pReq ); } - pReq->m_pIovecCur->iov_base = (void *)&finish; - pReq->m_pIovecCur->iov_len = LSAPI_PACKET_HEADER_LEN; - pReq->m_totalLen += LSAPI_PACKET_HEADER_LEN; + pReq->m_pIovecCur->iov_base = (void *)finish_close; + pReq->m_pIovecCur->iov_len = LSAPI_PACKET_HEADER_LEN << 1; + pReq->m_totalLen += LSAPI_PACKET_HEADER_LEN << 1; ++pReq->m_pIovecCur; LSAPI_Flush_r( pReq ); + lsapi_close_connection(pReq); } - send_conn_close_notification(pReq->m_fd); - lsapi_close_connection(pReq); pReq->m_reqState |= LSAPI_ST_BACKGROUND; } return 0; @@ -3163,8 +3170,8 @@ static int lsapi_prefork_server_accept( lsapi_prefork_server * pServer, #if defined(linux) || defined(__linux) || defined(__linux__) || defined(__gnu_linux__) *s_avail_pages = sysconf(_SC_AVPHYS_PAGES); - lsapi_log("Memory total: %zd, free: %zd, free %%%zd\n", - s_total_pages, *s_avail_pages, *s_avail_pages * 100 / s_total_pages); +// lsapi_log("Memory total: %zd, free: %zd, free %%%zd\n", +// s_total_pages, *s_avail_pages, *s_avail_pages * 100 / s_total_pages); #endif FD_ZERO( &readfds );