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: https://svn.perl.org/qpsmtpd/trunk@948 958fd67b-6ff1-0310-b445-bb7760255be9
This commit is contained in:
Radu Greab 2008-09-29 10:11:33 +00:00 committed by Ask Bjørn Hansen
parent 77582b0b10
commit f4afd7a18d

View File

@ -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;