Skip to content
Snippets Groups Projects
Commit efd1d9dc authored by Yang Tse's avatar Yang Tse
Browse files

Improve delay command interruptability
parent 88a0060b
No related branches found
No related tags found
No related merge requests found
......@@ -49,11 +49,67 @@ require "ftp.pm";
# }
#}
#**********************************************************************
# global vars...
#
my $verbose = 0; # set to 1 for debugging
my $ftpdnum="";
my $logfilename = 'log/logfile.log'; # Override this for each test server
#######################################################################
my $pasvbadip=0;
my $retrweirdo=0;
my $retrnosize=0;
my $srcdir=".";
my $nosave=0;
my $controldelay=0; # set to 1 to delay the control connect data sending to
# test that curl deals with that nicely
my $slavepid; # for the DATA connection sockfilt slave process
my $ipv6;
my $ext; # append to log/pid file names
my $grok_eprt;
my $port = 8921; # just a default
my $listenaddr = "127.0.0.1"; # just a default
my $pidfile = ".ftpd.pid"; # a default, use --pidfile
my $SERVERLOGS_LOCK="log/serverlogs.lock"; # server logs advisor read lock
my $serverlogslocked=0;
my $proto="ftp";
my $sfpid;
local(*SFREAD, *SFWRITE);
#**********************************************************************
# global vars used for signal handling
#
my $got_exit_signal = 0; # set if program should finish execution ASAP
my $exit_signal; # first signal handled in exit_signal_handler
#**********************************************************************
# exit_signal_handler will be triggered to indicate that the program
# should finish its execution in a controlled way as soon as possible.
# For now, program will also terminate from within this handler.
#
sub exit_signal_handler {
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.
ftpkillslaves($verbose);
unlink($pidfile);
if($serverlogslocked) {
$serverlogslocked = 0;
clear_advisor_read_lock($SERVERLOGS_LOCK);
}
exit;
}
#**********************************************************************
# getlogfilename returns a log file name depending on given arguments.
#
sub getlogfilename {
......@@ -66,7 +122,7 @@ sub getlogfilename {
return $filename;
}
#######################################################################
#**********************************************************************
# logmsg is general message logging subroutine for our test servers.
#
sub logmsg {
......@@ -103,27 +159,6 @@ sub ftpmsg {
# better on windows/cygwin
}
my $verbose=0; # set to 1 for debugging
my $pasvbadip=0;
my $retrweirdo=0;
my $retrnosize=0;
my $srcdir=".";
my $nosave=0;
my $controldelay=0; # set to 1 to delay the control connect data sending to
# test that curl deals with that nicely
my $slavepid; # for the DATA connection sockfilt slave process
my $ipv6;
my $ext; # append to log/pid file names
my $grok_eprt;
my $port = 8921; # just a default
my $listenaddr = "127.0.0.1"; # just a default
my $pidfile = ".ftpd.pid"; # a default, use --pidfile
my $SERVERLOGS_LOCK="log/serverlogs.lock"; # server logs advisor read lock
my $serverlogslocked=0;
my $proto="ftp";
do {
if($ARGV[0] eq "-v") {
$verbose=1;
......@@ -166,22 +201,8 @@ if($proto !~ /^(ftp|imap|pop3|smtp)\z/) {
die "unsupported protocol selected";
}
sub catch_zap {
my $signame = shift;
ftpkillslaves($verbose);
unlink($pidfile);
if($serverlogslocked) {
$serverlogslocked = 0;
clear_advisor_read_lock($SERVERLOGS_LOCK);
}
exit;
}
$SIG{INT} = \&catch_zap;
$SIG{TERM} = \&catch_zap;
my $sfpid;
local(*SFREAD, *SFWRITE);
$SIG{INT} = \&exit_signal_handler;
$SIG{TERM} = \&exit_signal_handler;
sub sysread_or_die {
my $FH = shift;
......@@ -1120,7 +1141,10 @@ while(1) {
if($delay) {
# just go sleep this many seconds!
logmsg("Sleep for $delay seconds\n");
sleep($delay);
my $twentieths = $delay * 20;
while($twentieths--) {
select(undef, undef, undef, 0.05) unless($got_exit_signal);
}
}
my $text;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment