Haineko
view release on metacpan or search on metacpan
lib/Haineko/Sendmail.pm view on Meta::CPAN
# |____/|_____|_| \_|____/|_| |_/_/ \_\___|_____|
#
require Module::Load;
my $maxworkers = scalar @$recipients;
my $preforkset = undef; # (Parallel::Prefork) object
my $preforkarg = undef; # (Ref->Hash) arguments for Parallel::Prefork
my $preforkipc = []; # (Ref->Array) IO::Pipe objects
my $useprefork = 0; # (Integer) use fork() or not
my $procnumber = 0; # (Integer) Job ID of each child process
my $trappedsig = 0; # (Integer) The number of received USR2 signal
if( $maxworkers > 1 ) {
# Adjust the number of max worker processes.
my $xprocesses = $serverconf->{'max_workers'} // $defaultset->{'smtpd'}->{'max_workers'};
if( Scalar::Util::looks_like_number $xprocesses ) {
# Limit the value of max_workers to the value defined in
# etc/haineko.cf or Haineko::Default.
$maxworkers = $xprocesses if $maxworkers > $xprocesses;
lib/Haineko/Sendmail.pm view on Meta::CPAN
if( $procnumber < $maxworkers ) {
$preforkipc->[ $procnumber ] = IO::Pipe->new;;
$procnumber++;
}
}
};
$preforkset = Parallel::Prefork->new( $preforkarg );
$SIG{'USR2'} = sub {
# Trap signal from each child process
$trappedsig++;
kill( 'TERM', $$ ) if $trappedsig >= $maxworkers;
};
}
my $sendmailto = sub {
# Code reference for sending an email to each recipient which called
# from Parallel::Prefork->start().
my $thisworker = undef;
local $SIG{'TERM'} = 'IGNORE';
( run in 0.333 second using v1.01-cache-2.11-cpan-71847e10f99 )