From 636d2fe00a4c09f3d9a857bee2c08117e325ea72 Mon Sep 17 00:00:00 2001 From: Yang Tse Date: Thu, 3 Dec 2009 13:12:04 +0000 Subject: signal handling to cleanup on SIGINT and SIGTERM --- tests/ftpserver.pl | 14 ++++++++------ 1 file 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); -- cgit v1.2.3