aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYang Tse <yangsita@gmail.com>2009-12-03 13:12:04 +0000
committerYang Tse <yangsita@gmail.com>2009-12-03 13:12:04 +0000
commit636d2fe00a4c09f3d9a857bee2c08117e325ea72 (patch)
tree645305025bf0f60d57d949873dad89d1e0c5f043
parentfb2425b1479c124f7c8b88cde8be91053c036264 (diff)
signal handling to cleanup on SIGINT and SIGTERM
-rw-r--r--tests/ftpserver.pl14
1 files changed, 8 insertions, 6 deletions
diff --git a/tests/ftpserver.pl b/tests/ftpserver.pl
index c1b53cdfc..94b6554b3 100644
--- a/tests/ftpserver.pl
+++ b/tests/ftpserver.pl
@@ -122,16 +122,16 @@ do {
sub catch_zap {
my $signame = shift;
- print STDERR "ftpserver.pl received SIG$signame, exiting\n";
ftpkillslaves(1);
+ unlink($pidfile);
if($serverlogslocked) {
$serverlogslocked = 0;
clear_advisor_read_lock($SERVERLOGS_LOCK);
}
- die "Somebody sent me a SIG$signame";
+ exit;
}
$SIG{INT} = \&catch_zap;
-$SIG{KILL} = \&catch_zap;
+$SIG{TERM} = \&catch_zap;
my $sfpid;
@@ -153,6 +153,7 @@ sub sysread_or_die {
logmsg "Error: ftp$ftpdnum$ext sysread error: $!\n";
kill(9, $sfpid);
waitpid($sfpid, 0);
+ unlink($pidfile);
if($serverlogslocked) {
$serverlogslocked = 0;
clear_advisor_read_lock($SERVERLOGS_LOCK);
@@ -166,6 +167,7 @@ sub sysread_or_die {
logmsg "Error: ftp$ftpdnum$ext read zero\n";
kill(9, $sfpid);
waitpid($sfpid, 0);
+ unlink($pidfile);
if($serverlogslocked) {
$serverlogslocked = 0;
clear_advisor_read_lock($SERVERLOGS_LOCK);
@@ -191,6 +193,7 @@ sub startsf {
logmsg "Failed sockfilt command: $cmd\n";
kill(9, $sfpid);
waitpid($sfpid, 0);
+ unlink($pidfile);
if($serverlogslocked) {
$serverlogslocked = 0;
clear_advisor_read_lock($SERVERLOGS_LOCK);
@@ -199,9 +202,6 @@ sub startsf {
}
}
-# remove the file here so that if startsf() fails, it is very noticeable
-unlink($pidfile);
-
startsf();
logmsg sprintf("FTP server listens on port IPv%d/$port\n", $ipv6?6:4);
@@ -939,6 +939,8 @@ while(1) {
print SFWRITE "QUIT\n";
waitpid $sfpid, 0;
+unlink($pidfile);
+
if($serverlogslocked) {
$serverlogslocked = 0;
clear_advisor_read_lock($SERVERLOGS_LOCK);