From 069d1fa0ca5872ef41294436d3d584e341f5cab1 Mon Sep 17 00:00:00 2001 From: radu Date: Mon, 29 Sep 2008 10:11:33 +0000 Subject: [PATCH] Diego warned me that the construct I used, signal sent to negative PID, is not portable. Replaced it with his construct, the negative signal. Also added the short sleep after socket close, as in his patch. git-svn-id: http://svn.perl.org/qpsmtpd/trunk@948 958fd67b-6ff1-0310-b445-bb7760255be9 --- qpsmtpd-prefork | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/qpsmtpd-prefork b/qpsmtpd-prefork index 600133c..3f7812d 100755 --- a/qpsmtpd-prefork +++ b/qpsmtpd-prefork @@ -19,6 +19,9 @@ use Qpsmtpd::TcpServer::Prefork; use Qpsmtpd::Constants; use Getopt::Long; +use Config; +defined $Config{sig_name} || die "No signals?"; + my $has_ipv6 = Qpsmtpd::TcpServer::has_ipv6; if ($has_ipv6) { @@ -27,6 +30,14 @@ if ($has_ipv6) { #use Time::HiRes qw(gettimeofday tv_interval); +#get available signals +my %sig_num; +my $i = 0; +foreach my $sig_name ( split( /\s/, $Config{sig_name} ) ) +{ + $sig_num{$sig_name} = $i++; +} + # secure shell $ENV{'PATH'} = '/bin:/usr/bin'; delete @ENV{qw(IFS CDPATH ENV BASH_ENV)}; @@ -227,11 +238,15 @@ sub run { # prevent another signal and disable reaper $SIG{$sig} = $SIG{CHLD} = $SIG{HUP} = 'IGNORE'; + # a notice, before the sleep below + info("shutting down"); + # close socket $d->close(); + sleep 2; # send signal to process group - kill $sig, -$$; + kill -$sig_num{$sig} => $$; # cleanup IPC::Shareable->clean_up;