Skip to content

Commit

Permalink
update to LSAPI 6.6
Browse files Browse the repository at this point in the history
Conflicts:
	sapi/litespeed/lsapi_main.c
  • Loading branch information
George Wang committed Jul 10, 2014
1 parent e3df0c5 commit 1f46bec
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 10 deletions.
2 changes: 1 addition & 1 deletion sapi/litespeed/lsapi_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down
44 changes: 35 additions & 9 deletions sapi/litespeed/lsapilib.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 ) );
Expand All @@ -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;
Expand Down Expand Up @@ -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;

Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;

}

Expand All @@ -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 );
Expand All @@ -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;
}

Expand Down Expand Up @@ -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;
Expand All @@ -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 )
Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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 );
Expand Down Expand Up @@ -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 )
{
Expand Down Expand Up @@ -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 )
Expand Down

0 comments on commit 1f46bec

Please sign in to comment.