X-Git-Url: http://git.ieval.ro/?p=gruntmaster-daemon.git;a=blobdiff_plain;f=lib%2FGruntmaster%2FDaemon%2FFormat%2FCPP.pm;h=96e9ddabcd4670979e4410ce54c6fee1f5ee3952;hp=66deec111f52b2a284ffe61745f29e8621eac0eb;hb=e3a3697ae29ae07d285d138b382c364136de0999;hpb=29182594d09e3f84f00746c959fbfbb95c3cc1c4 diff --git a/lib/Gruntmaster/Daemon/Format/CPP.pm b/lib/Gruntmaster/Daemon/Format/CPP.pm index 66deec1..96e9dda 100644 --- a/lib/Gruntmaster/Daemon/Format/CPP.pm +++ b/lib/Gruntmaster/Daemon/Format/CPP.pm @@ -4,7 +4,6 @@ use 5.014000; 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/; @@ -26,11 +25,9 @@ sub prepare{ 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 $? @@ -54,9 +51,8 @@ sub run{ 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 $!; @@ -66,10 +62,7 @@ sub run{ 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}} : (); } }