Start gruntmaster-exec alarm just before exec
authorMarius Gavrilescu <marius@ieval.ro>
Wed, 29 Jul 2015 11:29:42 +0000 (14:29 +0300)
committerMarius Gavrilescu <marius@ieval.ro>
Wed, 29 Jul 2015 11:29:42 +0000 (14:29 +0300)
This way, a part of the time needed for setup (forking, opening files,
setting limits) no longer counts against the time limit.

gruntmaster-exec
lib/Gruntmaster/Daemon/Format.pm

index b6577f4..fd79d8f 100755 (executable)
@@ -46,7 +46,13 @@ undef $mlimit if @sudo; # sudo wants a lot of address space
 
 my $ret = fork // die 'Cannot fork';
 if ($ret) {
-       my $tle;
+       my ($tle, $child_ready);
+       local $SIG{USR1} = sub { $child_ready = 1 };
+       sleep 3; # Wait for ready signal (SIGUSR1)
+       unless ($child_ready) {
+               kill KILL => $ret;
+               exit !say ERR, "\nNo response from gruntmaster-exec child";
+       }
        local $SIG{ALRM} = sub {
                if ($killuser) {
                        system @sudo, 'pkill', '-KILL', '-u', $killuser;
@@ -92,6 +98,7 @@ if ($ret) {
        print $adj 900;
        close $adj;
        unshift @ARGV, @sudo;
+       kill USR1 => getppid; # Tell parent process that we're ready
        say STDERR "Executing: ", join ' ', map { "'$_'" } @ARGV if $debug;
        exec @ARGV;
 }
index cd0e47d..0a73611 100644 (file)
@@ -63,7 +63,7 @@ sub execlist {
        unlink $er;
        chomp ($excode, $exmsg); ## no critic (ProhibitParensWithBuiltins)
        get_logger->trace("Exec result: $excode $exmsg");
-       die [$excode, $exmsg] if $excode > 0; ## no critic (RequireCarping)
+       die [$excode, $exmsg] if $excode; ## no critic (RequireCarping)
 }
 
 sub mkrun{
This page took 0.035175 seconds and 4 git commands to generate.