X-Git-Url: http://git.ieval.ro/?p=gruntmaster-daemon.git;a=blobdiff_plain;f=gruntmaster-exec;fp=gruntmaster-exec;h=d2807656d506909f27e14d68897b2317f20c4f53;hp=fd79d8f316c322c9008f14bbe98b402772011c77;hb=e9f461045839794795f6b16e1c31d36e6cf1d38d;hpb=0418cda23eb73ee9be138d4f8fab977927132007 diff --git a/gruntmaster-exec b/gruntmaster-exec index fd79d8f..d280765 100755 --- a/gruntmaster-exec +++ b/gruntmaster-exec @@ -39,6 +39,25 @@ GetOptions( "sudo!" => \$sudo, ); +sub test_pipe_read { + my $data = ''; + sysread STDIN, $data, 4096 and syswrite STDOUT, "recvd\n" until $data =~ /done/; + syswrite STDOUT, 'done'; +} + +sub test_pipe_write { + my ($rin, $rout); + vec($rin, fileno STDIN, 1) = 1; + syswrite STDOUT, "data\n" until select $rout = $rin, undef, undef, 0.05; + syswrite STDOUT, 'done'; + my $data = ''; + sysread STDIN, $data, 4096 until $data =~ /done/; +} + +sub test_pipes { + $ARGV[0] =~ /prog/ ? test_pipe_read : test_pipe_write +} + my $killuser = $ENV{GRUNTMASTER_KILL_USER}; my @sudo; @sudo = (shellwords ($ENV{GRUNTMASTER_SUDO}), '--') if $ENV{GRUNTMASTER_SUDO} && $sudo; @@ -88,6 +107,7 @@ if ($ret) { POSIX::close $oldfd or die $!; } } + test_pipes if grep /tty|fifo/, @fds; my $nproc = $killuser ? 15 : 1; my $debug = $ENV{TEST_VERBOSE}; %ENV = (ONLINE_JUDGE => 1, PATH => $ENV{PATH}, HOME => $ENV{HOME});