Author: radu
Date: Mon Sep 29 03:11:33 2008
New Revision: 948
Modified:
trunk/qpsmtpd-prefork
Log:
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.
Modified: trunk/qpsmtpd-prefork
==============================================================================
--- trunk/qpsmtpd-prefork (original)
+++ trunk/qpsmtpd-prefork Mon Sep 29 03:11:33 2008
@@ -19,6 +19,9 @@
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 @@
#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 @@
# 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;