diff options
author | George Wang <gwang@php.net> | 2013-11-26 18:53:35 -0500 |
---|---|---|
committer | George Wang <gwang@php.net> | 2014-07-10 15:33:14 -0400 |
commit | ee0c8f8d6f3faa9a348944cc8ff5fddc39a6aa10 (patch) | |
tree | 0b2767e47afc681cc48144c414fe48ab5eb85bb9 /sapi | |
parent | 0285720570e301f4a10bc3f48791f77b63d13fcd (diff) | |
download | php-git-ee0c8f8d6f3faa9a348944cc8ff5fddc39a6aa10.tar.gz |
update to LSAPI 6.6
Conflicts:
sapi/litespeed/lsapi_main.c
Diffstat (limited to 'sapi')
-rw-r--r-- | sapi/litespeed/lsapi_main.c | 2 | ||||
-rw-r--r-- | sapi/litespeed/lsapilib.c | 44 |
2 files changed, 36 insertions, 10 deletions
diff --git a/sapi/litespeed/lsapi_main.c b/sapi/litespeed/lsapi_main.c index bc236bafab..3413a423ac 100644 --- a/sapi/litespeed/lsapi_main.c +++ b/sapi/litespeed/lsapi_main.c @@ -370,7 +370,7 @@ static void sapi_lsapi_log_message(char *message TSRMLS_DC) static sapi_module_struct lsapi_sapi_module = { "litespeed", - "LiteSpeed V6.4", + "LiteSpeed V6.6", php_lsapi_startup, /* startup */ php_module_shutdown_wrapper, /* shutdown */ diff --git a/sapi/litespeed/lsapilib.c b/sapi/litespeed/lsapilib.c index 8a10ac62cd..cdf9e882dc 100644 --- a/sapi/litespeed/lsapilib.c +++ b/sapi/litespeed/lsapilib.c @@ -1229,6 +1229,7 @@ int LSAPI_IsRunning(void) int LSAPI_InitRequest( LSAPI_Request * pReq, int fd ) { + int newfd; if ( !pReq ) return -1; memset( pReq, 0, sizeof( LSAPI_Request ) ); @@ -1242,7 +1243,14 @@ int LSAPI_InitRequest( LSAPI_Request * pReq, int fd ) pReq->m_respPktHeaderEnd = &pReq->m_respPktHeader[5]; if ( allocateRespHeaderBuf( pReq, LSAPI_INIT_RESP_HEADER_LEN ) == -1 ) return -1; - + + if ( fd == STDIN_FILENO ) + { + fd = dup( fd ); + newfd = open( "/dev/null", O_RDWR ); + dup2( newfd, STDIN_FILENO ); + } + if ( isPipe( fd ) ) { pReq->m_fdListen = -1; @@ -2404,6 +2412,8 @@ typedef struct _lsapi_prefork_server int m_iAvoidFork; lsapi_child_status * m_pChildrenStatus; + lsapi_child_status * m_pChildrenStatusCur; + lsapi_child_status * m_pChildrenStatusEnd; }lsapi_prefork_server; @@ -2492,11 +2502,15 @@ static void lsapi_cleanup(int signal) static lsapi_child_status * find_child_status( int pid ) { lsapi_child_status * pStatus = g_prefork_server->m_pChildrenStatus; - lsapi_child_status * pEnd = g_prefork_server->m_pChildrenStatus + g_prefork_server->m_iMaxChildren * 2; + lsapi_child_status * pEnd = g_prefork_server->m_pChildrenStatusEnd; while( pStatus < pEnd ) { if ( pStatus->m_pid == pid ) + { + if ( pStatus + 1 > g_prefork_server->m_pChildrenStatusCur ) + g_prefork_server->m_pChildrenStatusCur = pStatus + 1; return pStatus; + } ++pStatus; } return NULL; @@ -2531,8 +2545,12 @@ static void lsapi_sigchild( int signal ) { child_status->m_pid = 0; --g_prefork_server->m_iCurChildren; + } } + while(( g_prefork_server->m_pChildrenStatusCur > g_prefork_server->m_pChildrenStatus ) + &&( g_prefork_server->m_pChildrenStatusCur[-1].m_pid == 0 )) + --g_prefork_server->m_pChildrenStatusCur; } @@ -2541,7 +2559,7 @@ static int lsapi_init_children_status() int size = 4096; char * pBuf; - size = g_prefork_server->m_iMaxChildren * sizeof( lsapi_child_status ) * 2; + size = (g_prefork_server->m_iMaxChildren + g_prefork_server->m_iExtraChildren ) * sizeof( lsapi_child_status ) * 2; size = (size + 4095 ) / 4096 * 4096; pBuf =( char*) mmap( NULL, size, PROT_READ | PROT_WRITE, MAP_ANON | MAP_SHARED, -1, 0 ); @@ -2551,7 +2569,9 @@ static int lsapi_init_children_status() return -1; } memset( pBuf, 0, size ); - g_prefork_server->m_pChildrenStatus = (lsapi_child_status *)pBuf; + g_prefork_server->m_pChildrenStatus = (lsapi_child_status *)pBuf; + g_prefork_server->m_pChildrenStatusCur = (lsapi_child_status *)pBuf; + g_prefork_server->m_pChildrenStatusEnd = (lsapi_child_status *)pBuf + size / sizeof( lsapi_child_status ); return 0; } @@ -2581,7 +2601,7 @@ static void lsapi_check_child_status( long tmCur ) int dying = 0; int count = 0; lsapi_child_status * pStatus = g_prefork_server->m_pChildrenStatus; - lsapi_child_status * pEnd = g_prefork_server->m_pChildrenStatus + g_prefork_server->m_iMaxChildren * 2; + lsapi_child_status * pEnd = g_prefork_server->m_pChildrenStatusCur; while( pStatus < pEnd ) { tobekilled = 0; @@ -2594,13 +2614,15 @@ static void lsapi_check_child_status( long tmCur ) if (( g_prefork_server->m_iCurChildren - dying > g_prefork_server->m_iMaxChildren)|| ( idle > g_prefork_server->m_iMaxIdleChildren )) { - tobekilled = SIGUSR1; + ++pStatus->m_iKillSent; + //tobekilled = SIGUSR1; } else { if (( s_max_idle_secs> 0)&&(tmCur - pStatus->m_tmWaitBegin > s_max_idle_secs + 5 )) { - tobekilled = SIGUSR1; + ++pStatus->m_iKillSent; + //tobekilled = SIGUSR1; } } if ( !tobekilled ) @@ -2734,6 +2756,8 @@ static int lsapi_prefork_server_accept( lsapi_prefork_server * pServer, LSAPI_Re if ( pServer->m_iCurChildren >= (pServer->m_iMaxChildren + pServer->m_iExtraChildren ) ) { + fprintf( stderr, "Reached max children process limit: %d, extra: %d, current: %d, please increase LSAPI_CHILDREN.\n", + pServer->m_iMaxChildren, pServer->m_iExtraChildren, pServer->m_iCurChildren ); usleep( 100000 ); continue; } @@ -2894,7 +2918,7 @@ int LSAPI_Prefork_Accept_r( LSAPI_Request * pReq ) { if ( !g_running ) return -1; - if (( s_pChildStatus )&&( s_pChildStatus->m_iKillSent )) + if ((s_req_processed)&&( s_pChildStatus )&&( s_pChildStatus->m_iKillSent )) return -1; FD_ZERO( &readfds ); FD_SET( fd, &readfds ); @@ -2922,7 +2946,7 @@ int LSAPI_Prefork_Accept_r( LSAPI_Request * pReq ) } else if ( ret >= 1 ) { - if (( s_pChildStatus )&&( s_pChildStatus->m_iKillSent )) + if (s_req_processed && ( s_pChildStatus )&&( s_pChildStatus->m_iKillSent )) return -1; if ( fd == pReq->m_fdListen ) { @@ -3084,6 +3108,8 @@ static int lsapi_initSuEXEC() { if ( g_prefork_server->m_iMaxChildren < 100 ) g_prefork_server->m_iMaxChildren = 100; + if ( g_prefork_server->m_iExtraChildren < 1000 ) + g_prefork_server->m_iExtraChildren = 1000; } } if ( !s_defaultUid || !s_defaultGid ) |