Improve delay command interruptability
This commit is contained in:
parent
88a0060b2e
commit
efd1d9dc04
@ -49,11 +49,67 @@ require "ftp.pm";
|
|||||||
# }
|
# }
|
||||||
#}
|
#}
|
||||||
|
|
||||||
|
#**********************************************************************
|
||||||
|
# global vars...
|
||||||
|
#
|
||||||
|
my $verbose = 0; # set to 1 for debugging
|
||||||
my $ftpdnum="";
|
my $ftpdnum="";
|
||||||
|
|
||||||
my $logfilename = 'log/logfile.log'; # Override this for each test server
|
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.
|
# getlogfilename returns a log file name depending on given arguments.
|
||||||
#
|
#
|
||||||
sub getlogfilename {
|
sub getlogfilename {
|
||||||
@ -66,7 +122,7 @@ sub getlogfilename {
|
|||||||
return $filename;
|
return $filename;
|
||||||
}
|
}
|
||||||
|
|
||||||
#######################################################################
|
#**********************************************************************
|
||||||
# logmsg is general message logging subroutine for our test servers.
|
# logmsg is general message logging subroutine for our test servers.
|
||||||
#
|
#
|
||||||
sub logmsg {
|
sub logmsg {
|
||||||
@ -103,27 +159,6 @@ sub ftpmsg {
|
|||||||
# better on windows/cygwin
|
# 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 {
|
do {
|
||||||
if($ARGV[0] eq "-v") {
|
if($ARGV[0] eq "-v") {
|
||||||
$verbose=1;
|
$verbose=1;
|
||||||
@ -166,22 +201,8 @@ if($proto !~ /^(ftp|imap|pop3|smtp)\z/) {
|
|||||||
die "unsupported protocol selected";
|
die "unsupported protocol selected";
|
||||||
}
|
}
|
||||||
|
|
||||||
sub catch_zap {
|
$SIG{INT} = \&exit_signal_handler;
|
||||||
my $signame = shift;
|
$SIG{TERM} = \&exit_signal_handler;
|
||||||
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);
|
|
||||||
|
|
||||||
sub sysread_or_die {
|
sub sysread_or_die {
|
||||||
my $FH = shift;
|
my $FH = shift;
|
||||||
@ -1120,7 +1141,10 @@ while(1) {
|
|||||||
if($delay) {
|
if($delay) {
|
||||||
# just go sleep this many seconds!
|
# just go sleep this many seconds!
|
||||||
logmsg("Sleep for $delay seconds\n");
|
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;
|
my $text;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user