diff options
-rw-r--r-- | tests/ftp.pm | 54 | ||||
-rw-r--r-- | tests/ftpserver.pl | 2 | ||||
-rwxr-xr-x | tests/runtests.pl | 14 |
3 files changed, 44 insertions, 26 deletions
diff --git a/tests/ftp.pm b/tests/ftp.pm index 421fee1a6..eed64903e 100644 --- a/tests/ftp.pm +++ b/tests/ftp.pm @@ -5,7 +5,7 @@ # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # -# Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al. +# Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al. # # This software is licensed as described in the file COPYING, which # you should have received as part of this distribution. The terms @@ -22,30 +22,48 @@ ########################################################################### ####################################################################### -# Return the pid of the server as found in the given pid file +# pidfromfile returns the pid stored in the given pidfile. The value +# of the returned pid will never be a negative value. It will be zero +# on any file related error or if a pid can not be extracted from the +# given file. # -sub serverpid { - my $PIDFILE = $_[0]; - open(PFILE, "<$PIDFILE"); - my $PID=0+<PFILE>; - close(PFILE); - return $PID; +sub pidfromfile { + my $pidfile = $_[0]; + my $pid = 0; + + if(-f $pidfile && -s $pidfile && open(PIDFH, "<$pidfile")) { + $pid = 0 + <PIDFH>; + close(PIDFH); + $pid = 0 unless($pid > 0); + } + return $pid; } ####################################################################### -# Check the given test server if it is still alive. +# processexists checks if a process with the pid stored in the given +# pidfile exists and is alive. This will return 0 on any file related +# error or if a pid can not be extracted from the given file. When a +# process with the same pid as the one extracted from the given file +# is currently alive this returns that positive pid. Otherwise, when +# the process is not alive, will return the negative value of the pid. # -sub checkserver { - my ($pidfile)=@_; - my $pid=0; - - # check for pidfile - if ( -f $pidfile ) { - $pid=serverpid($pidfile); - if ($pid ne "" && kill(0, $pid)) { +sub processexists { +# use POSIX ":sys_wait_h"; + my $pidfile = $_[0]; + + # fetch pid from pidfile + my $pid = pidfromfile($pidfile); + + if($pid > 0) { + # verify if currently alive + if(kill(0, $pid)) { return $pid; } else { + # reap it if this has not already been done + # waitpid($pid, &WNOHANG); + # get rid of the certainly invalid pidfile + unlink($pidfile) if($pid == pidfromfile($pidfile)); return -$pid; # negative means dead process } } @@ -60,7 +78,7 @@ sub ftpkillslave { my $base; for $base (('filt', 'data')) { my $f = ".sock$base$id$ext.pid"; - my $pid = checkserver($f); + my $pid = processexists($f); if($pid > 0) { printf ("* kill pid for %s => %d\n", "ftp-$base$id$ext", $pid) if($verbose); kill (9, $pid); # die! diff --git a/tests/ftpserver.pl b/tests/ftpserver.pl index ddbc57430..c1b53cdfc 100644 --- a/tests/ftpserver.pl +++ b/tests/ftpserver.pl @@ -577,7 +577,7 @@ sub PASV_command { my $pasvport; my $pidf=".sockdata$ftpdnum$ext.pid"; - my $prev = checkserver($pidf); + my $prev = processexists($pidf); if($prev > 0) { print "kill existing server: $prev\n" if($verbose); kill(9, $prev); diff --git a/tests/runtests.pl b/tests/runtests.pl index be20a63ab..834c86652 100755 --- a/tests/runtests.pl +++ b/tests/runtests.pl @@ -828,7 +828,7 @@ sub runhttpserver { return (0,0); } - my $pid = checkserver($pidfile); + my $pid = processexists($pidfile); if($pid > 0) { stopserver($pid); } @@ -898,7 +898,7 @@ sub runhttpsserver { return (0,0); } - my $pid = checkserver($pidfile); + my $pid = processexists($pidfile); if($pid > 0) { # kill previous stunnel! stopserver($pid); @@ -968,7 +968,7 @@ sub runftpserver { return (0,0); } - my $pid = checkserver($pidfile); + my $pid = processexists($pidfile); if($pid > 0) { stopserver($pid); } @@ -1045,7 +1045,7 @@ sub runftpsserver { return (0,0); } - my $pid = checkserver($pidfile); + my $pid = processexists($pidfile); if($pid > 0) { # kill previous stunnel! stopserver($pid); @@ -1114,7 +1114,7 @@ sub runtftpserver { return (0,0); } - my $pid = checkserver($pidfile); + my $pid = processexists($pidfile); if($pid > 0) { stopserver($pid); } @@ -1179,7 +1179,7 @@ sub runsshserver { return (0,0); } - my $pid = checkserver($pidfile); + my $pid = processexists($pidfile); if($pid > 0) { stopserver($pid); } @@ -1254,7 +1254,7 @@ sub runsocksserver { return (0,0); } - my $pid = checkserver($pidfile); + my $pid = processexists($pidfile); if($pid > 0) { stopserver($pid); } |