Avoid zombies on TLE in interactive problems
[gruntmaster-daemon.git] / lib / Gruntmaster / Daemon / Runner / Interactive.pm
index 115e7a198ac577b0d4cc555ca9fdfe3f1a8b8346..5a986754c8b6451471c91d0957f4bb1a6a787114 100644 (file)
@@ -23,8 +23,13 @@ sub run{
 
        my $ret = fork // get_logger->logdie("Fork failed: $!");
        if ($ret) {
-               $meta->{files}{prog}{run}->($meta->{files}{prog}{name}, fds => [qw/0 fifo1 1 >fifo2/], map {defined $meta->{$_} ? ($_ => $meta->{$_}) : () } qw/timeout mlimit/);
-               waitpid $ret, 0;
+               try {
+                       $meta->{files}{prog}{run}->($meta->{files}{prog}{name}, fds => [qw/0 fifo1 1 >fifo2/], map {defined $meta->{$_} ? ($_ => $meta->{$_}) : () } qw/timeout mlimit/);
+               } catch {
+                       die $_
+               } finally {
+                       waitpid $ret, 0;
+               };
                die [WA, "Wrong Answer"] if $?;
        } else {
                try {
This page took 0.010043 seconds and 4 git commands to generate.