A typo error has been inserted in my report.
The right piece of code is:
######
sub execute($;$$)
{
my ($command, $stdout, $stderr) = @_;
fatal('$stdout must be a scalar reference') if $stdout && ref
$stdout ne 'SCALAR';
fatal('$stderr must be a scalar reference') if $stderr && ref
$stderr ne 'SCALAR';
debug("Execute $command");
my $sel = IO::Select->new();
my $pid;
if(defined $stdout && defined $stderr) {
$pid = open3(gensym, \*CATCHOUT, \*CATCHERR, $command);
$sel->add(\*CATCHOUT, \*CATCHERR);
} elsif(defined $stdout) {
$pid = open3(gensym, \*CATCHOUT, ">&STDERR", $command);
$sel->add(\*CATCHOUT);
} elsif(defined $stderr) {
$pid = open3(gensym, ">&STDOUT", \*CATCHERR, $command);
$sel->add(\*CATCHERR);
} else {
system($command);
return getExitCode($?);
}
while (my @ready = $sel->can_read()) {
foreach my $fh (@ready) {
if ($stderr && fileno($fh) == fileno(\*CATCHERR)) {
$$stderr .= do { local $/; <$fh> };
} elsif($stdout) {
$$stdout .= do { local $/; <$fh> };
}
$sel->remove($fh) if eof($fh);
}
}
waitpid($pid, 0) if $pid;
close(\*CATCHOUT) if defined $stdout;
close(\*CATCHERR) if defined $stderr;
chomp($$stdout ||= '');
chomp($$stderr ||= '');
getExitCode($?);
}
##############
sub restart
{
my $self = shift;
my $rs = $self->{'hooksManager'}->trigger('beforeMtaRestart');
return $rs if $rs;
my ($stdout, $stderr);
$rs = execute("$main::imscpConfig{'SERVICE_MNGR'}
$self->{'config'}->{'MTA_SNAME'} restart", \$stdout, \$stderr);
debug($stdout) if $stdout;
error($stderr) if $stderr && $rs > 1;
return $rs if $rs > 1;
$self->{'hooksManager'}->trigger('afterMtaRestart');
}
##############
--
Laurent Declercq
iHMS/i-MSCP Project Lead
--
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org