Back out some pingpong server stopping changes introduced last week in

order to re-use 'classic' stopping and allow taking test-suite run time
references from this state.
This commit is contained in:
Yang Tse 2009-12-23 15:20:20 +00:00
Родитель 271dc9c582
Коммит c74875d94e
3 изменённых файлов: 25 добавлений и 52 удалений

Просмотреть файл

@ -170,8 +170,6 @@ sub killpid {
sub ftpkillslave { sub ftpkillslave {
my ($id, $ext, $verbose)=@_; my ($id, $ext, $verbose)=@_;
my $base; my $base;
my $pidlist;
my @pidfiles;
for $base (('filt', 'data')) { for $base (('filt', 'data')) {
my $f = ".sock$base$id$ext.pid"; my $f = ".sock$base$id$ext.pid";
@ -179,15 +177,10 @@ sub ftpkillslave {
if($pid > 0) { if($pid > 0) {
printf ("* kill pid for %s => %d\n", "ftp-$base$id$ext", $pid) printf ("* kill pid for %s => %d\n", "ftp-$base$id$ext", $pid)
if($verbose); if($verbose);
$pidlist .= "$pid "; kill (9, $pid);
waitpid($pid, 0);
} }
push @pidfiles, $f; unlink($f);
}
killpid($verbose, $pidlist);
foreach my $pidfile (@pidfiles) {
unlink($pidfile);
} }
} }
@ -197,8 +190,6 @@ sub ftpkillslave {
# #
sub ftpkillslaves { sub ftpkillslaves {
my ($verbose) = @_; my ($verbose) = @_;
my $pidlist;
my @pidfiles;
for $ext (('', 'ipv6')) { for $ext (('', 'ipv6')) {
for $id (('', '2')) { for $id (('', '2')) {
@ -208,18 +199,13 @@ sub ftpkillslaves {
if($pid > 0) { if($pid > 0) {
printf ("* kill pid for %s => %d\n", "ftp-$base$id$ext", printf ("* kill pid for %s => %d\n", "ftp-$base$id$ext",
$pid) if($verbose); $pid) if($verbose);
$pidlist .= "$pid "; kill (9, $pid);
waitpid($pid, 0);
} }
push @pidfiles, $f; unlink($f);
} }
} }
} }
killpid($verbose, $pidlist);
foreach my $pidfile (@pidfiles) {
unlink($pidfile);
}
} }

Просмотреть файл

@ -96,12 +96,6 @@ my $exit_signal; # first signal handled in exit_signal_handler
# #
sub exit_signal_handler { sub exit_signal_handler {
my $signame = shift; my $signame = shift;
local $!; # preserve errno
if($got_exit_signal == 0) {
$got_exit_signal = 1;
$exit_signal = $signame;
}
$SIG{$signame} = \&exit_signal_handler;
# For now, simply mimic old behavior. # For now, simply mimic old behavior.
ftpkillslaves($verbose); ftpkillslaves($verbose);
unlink($pidfile); unlink($pidfile);
@ -112,19 +106,6 @@ sub exit_signal_handler {
exit; exit;
} }
#**********************************************************************
# dead_child_handler takes care of reaping dead child processes.
#
sub dead_child_handler {
use POSIX ":sys_wait_h";
local $!; # preserve errno
local $?; # preserve exit status
while (waitpid(-1, &WNOHANG) > 0) {
select(undef, undef, undef, 0.05);
}
$SIG{CHLD} = \&dead_child_handler;
}
#********************************************************************** #**********************************************************************
# getlogfilename returns a log file name depending on given arguments. # getlogfilename returns a log file name depending on given arguments.
# #
@ -220,7 +201,6 @@ if($proto !~ /^(ftp|imap|pop3|smtp)\z/) {
$SIG{INT} = \&exit_signal_handler; $SIG{INT} = \&exit_signal_handler;
$SIG{TERM} = \&exit_signal_handler; $SIG{TERM} = \&exit_signal_handler;
$SIG{CHLD} = \&dead_child_handler;
sub sysread_or_die { sub sysread_or_die {
my $FH = shift; my $FH = shift;
@ -236,7 +216,8 @@ sub sysread_or_die {
($fcaller, $lcaller) = (caller)[1,2]; ($fcaller, $lcaller) = (caller)[1,2];
logmsg "Failed to read input\n"; logmsg "Failed to read input\n";
logmsg "Error: ftp$ftpdnum$ext sysread error: $!\n"; logmsg "Error: ftp$ftpdnum$ext sysread error: $!\n";
killpid($verbose, $sfpid); kill(9, $sfpid);
waitpid($sfpid, 0);
logmsg "Exited from sysread_or_die() at $fcaller " . logmsg "Exited from sysread_or_die() at $fcaller " .
"line $lcaller. ftp$ftpdnum$ext sysread error: $!\n"; "line $lcaller. ftp$ftpdnum$ext sysread error: $!\n";
unlink($pidfile); unlink($pidfile);
@ -250,7 +231,8 @@ sub sysread_or_die {
($fcaller, $lcaller) = (caller)[1,2]; ($fcaller, $lcaller) = (caller)[1,2];
logmsg "Failed to read input\n"; logmsg "Failed to read input\n";
logmsg "Error: ftp$ftpdnum$ext read zero\n"; logmsg "Error: ftp$ftpdnum$ext read zero\n";
killpid($verbose, $sfpid); kill(9, $sfpid);
waitpid($sfpid, 0);
logmsg "Exited from sysread_or_die() at $fcaller " . logmsg "Exited from sysread_or_die() at $fcaller " .
"line $lcaller. ftp$ftpdnum$ext read zero\n"; "line $lcaller. ftp$ftpdnum$ext read zero\n";
unlink($pidfile); unlink($pidfile);
@ -276,7 +258,8 @@ sub startsf {
if($pong !~ /^PONG/) { if($pong !~ /^PONG/) {
logmsg "Failed sockfilt command: $cmd\n"; logmsg "Failed sockfilt command: $cmd\n";
killpid($verbose, $sfpid); kill(9, $sfpid);
waitpid($sfpid, 0);
unlink($pidfile); unlink($pidfile);
if($serverlogslocked) { if($serverlogslocked) {
$serverlogslocked = 0; $serverlogslocked = 0;
@ -824,7 +807,8 @@ sub PASV_ftp {
my $prev = processexists($pidf); my $prev = processexists($pidf);
if($prev > 0) { if($prev > 0) {
print "kill existing server: $prev\n" if($verbose); print "kill existing server: $prev\n" if($verbose);
killpid($verbose, $prev); kill(9, $prev);
waitpid($prev, 0);
} }
# We fire up a new sockfilt to do the data transfer for us. # We fire up a new sockfilt to do the data transfer for us.
@ -837,7 +821,8 @@ sub PASV_ftp {
sysread_or_die(\*DREAD, \$pong, 5); sysread_or_die(\*DREAD, \$pong, 5);
if($pong !~ /^PONG/) { if($pong !~ /^PONG/) {
killpid($verbose, $slavepid); kill(9, $slavepid);
waitpid($slavepid, 0);
sendcontrol "500 no free ports!\r\n"; sendcontrol "500 no free ports!\r\n";
logmsg "failed to run sockfilt for data connection\n"; logmsg "failed to run sockfilt for data connection\n";
return 0; return 0;
@ -971,7 +956,8 @@ sub PORT_ftp {
if($pong !~ /^PONG/) { if($pong !~ /^PONG/) {
logmsg "Failed sockfilt for data connection\n"; logmsg "Failed sockfilt for data connection\n";
killpid($verbose, $slavepid); kill(9, $slavepid);
waitpid($slavepid, 0);
} }
logmsg "====> Client DATA connect to port $port\n"; logmsg "====> Client DATA connect to port $port\n";
@ -1091,7 +1077,8 @@ while(1) {
# flush data: # flush data:
$| = 1; $| = 1;
killpid($verbose, $slavepid); kill(9, $slavepid) if($slavepid);
waitpid($slavepid, 0) if($slavepid);
$slavepid=0; $slavepid=0;
&customize(); # read test control instructions &customize(); # read test control instructions

Просмотреть файл

@ -2277,6 +2277,11 @@ sub singletest {
my @killservers = getpart("client", "killserver"); my @killservers = getpart("client", "killserver");
foreach my $serv (@killservers) { foreach my $serv (@killservers) {
chomp $serv; chomp $serv;
if($serv =~ /^ftp(\d*)(-ipv6|)/) {
my ($id, $ext) = ($1, $2);
#print STDERR "SERV $serv $id $ext\n";
ftpkillslave($id, $ext, $verbose);
}
if($run{$serv}) { if($run{$serv}) {
stopserver($run{$serv}); # the pid file is in the hash table stopserver($run{$serv}); # the pid file is in the hash table
$run{$serv}=0; # clear pid $run{$serv}=0; # clear pid
@ -2284,11 +2289,6 @@ sub singletest {
else { else {
logmsg "RUN: The $serv server is not running\n"; logmsg "RUN: The $serv server is not running\n";
} }
if($serv =~ /^ftp(\d*)(-ipv6|)/) {
my ($id, $ext) = ($1, $2);
#print STDERR "SERV $serv $id $ext\n";
ftpkillslave($id, $ext, $verbose);
}
} }
# remove the test server commands file after each test # remove the test server commands file after each test