use strict;
use warnings;
-use BSD::Resource qw/setrlimit RLIMIT_AS RLIMIT_FSIZE/;
use POSIX qw//;
use File::Basename qw/fileparse/;
use Gruntmaster::Daemon::Constants qw/TLE OLE DIED NZX/;
get_logger->trace("Preparing file $name...");
open my $devnull, devnull;
- open my $errors, '>compile-error';
- my $ret = open3 $devnull, $errors, undef, 'g++', '-o', $basename, $name;
- local $SIG{ALRM} = sub {kill KILL => $ret};
- alarm 5;
- wait;
+ open my $errors, '>>compile-error';
+ my $ret = open3 $devnull, $errors, undef, 'gruntmaster-compile', CPP => $basename, $name;
+ waitpid $ret, 0;
close $devnull;
close $errors;
die 'Compile error' if $?
die [NZX, "Non-zero exit status: " . ($? >> 8)] if $?;
} else {
my @fds = exists $args{fds} ? @{$args{fds}} : ();
- get_logger->trace("Running $basename with fds ". join ' ', @fds);
$^F = 50;
- POSIX::close $_ for 0, 1, 3 .. $^F;
+ POSIX::close $_ for 0 .. $^F;
my $it = natatime 2, @fds;
while (my ($fd, $file) = $it->()) {
open my $fh, $file or die $!;
POSIX::close $oldfd or die $!;
}
}
-# POSIX::close 2;
- setrlimit RLIMIT_AS, $args{mlimit}, $args{mlimit} if exists $args{mlimit};
- setrlimit RLIMIT_FSIZE, $args{olimit}, $args{olimit} if exists $args{olimit};
- exec "./$basename", exists $args{args} ? @{$args{args}} : ();
+ exec 'gruntmaster-exec', $args{mlimit} // 0, $args{olimit} // 0, "./$basename", exists $args{args} ? @{$args{args}} : ();
}
}