diff options
author | Yang Tse <yangsita@gmail.com> | 2009-12-03 13:12:04 +0000 |
---|---|---|
committer | Yang Tse <yangsita@gmail.com> | 2009-12-03 13:12:04 +0000 |
commit | 636d2fe00a4c09f3d9a857bee2c08117e325ea72 (patch) | |
tree | 645305025bf0f60d57d949873dad89d1e0c5f043 | |
parent | fb2425b1479c124f7c8b88cde8be91053c036264 (diff) |
signal handling to cleanup on SIGINT and SIGTERM
-rw-r--r-- | tests/ftpserver.pl | 14 |
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); |