Skip to content
Browse files

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
  • Loading branch information...
1 parent acdac0c commit 069d1fa0ca5872ef41294436d3d584e341f5cab1 radu committed Sep 29, 2008
Showing with 16 additions and 1 deletion.
  1. +16 −1 qpsmtpd-prefork
View
17 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;

0 comments on commit 069d1fa

Please sign in to comment.
Something went wrong with that request. Please try again.