@ -549,19 +549,35 @@ void xmlrpc_kill_calls(void *p) {
xmlrpc_value * r ;
xmlrpc_value * r ;
pid_t pid ;
pid_t pid ;
sigset_t ss ;
sigset_t ss ;
int i = 0 ;
int status ;
while ( xh - > tags ) {
while ( xh - > tags ) {
pid = fork ( ) ;
pid = fork ( ) ;
if ( pid ) {
if ( pid ) {
waitpid ( pid , NULL , 0 ) ;
xh - > tags = g_slist_delete_link ( xh - > tags , xh - > tags ) ;
retry :
pid = waitpid ( pid , & status , 0 ) ;
if ( ( pid > 0 & & WIFEXITED ( status ) ) | | i > = 3 ) {
xh - > tags = g_slist_delete_link ( xh - > tags , xh - > tags ) ;
i = 0 ;
}
else {
if ( pid = = - 1 & & errno = = EINTR )
goto retry ;
i + + ;
}
continue ;
continue ;
}
}
/* child process */
/* child process */
rlim ( RLIMIT_CORE , 0 ) ;
sigemptyset ( & ss ) ;
sigemptyset ( & ss ) ;
sigprocmask ( SIG_SETMASK , & ss , NULL ) ;
sigprocmask ( SIG_SETMASK , & ss , NULL ) ;
for ( i = 0 ; i < 100 ; i + + )
close ( i ) ;
alarm ( 5 ) ;
alarm ( 5 ) ;
xmlrpc_env_init ( & e ) ;
xmlrpc_env_init ( & e ) ;