X-Git-Url: http://dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXCommandmode.pm;h=3d5ce0c9f6fb5fa9744939c7e121b8429b06b706;hb=refs%2Fheads%2Fnewdisc;hp=4212d968b236aaf408288bd09a55930d0a102b8b;hpb=7378e3c43c4448328c2e7a1842244ef7a48f0fdd;p=spider.git diff --git a/perl/DXCommandmode.pm b/perl/DXCommandmode.pm index 4212d968..3d5ce0c9 100644 --- a/perl/DXCommandmode.pm +++ b/perl/DXCommandmode.pm @@ -43,7 +43,7 @@ use JSON; use Time::HiRes qw(gettimeofday tv_interval); use Mojo::IOLoop; -use Mojo::IOLoop::ForkCall; +use Mojo::IOLoop::Subprocess; use Mojo::UserAgent; use strict; @@ -490,7 +490,7 @@ sub send_ans } # -# this is the thing that runs the command, it is done like this for the +# this is the thing that preps for running the command, it is done like this for the # benefit of remote command execution # @@ -1265,22 +1265,6 @@ sub send_motd $self->send_file($motd) if -e $motd; } -sub _diffms -{ - return unless isdbg('chan'); - my $call = shift; - my $line = shift; - my $ta = shift; - my $tb = shift || [gettimeofday]; - - my $a = int($ta->[0] * 1000) + int($ta->[1] / 1000); - my $b = int($tb->[0] * 1000) + int($tb->[1] / 1000); - my $msecs = $b - $a; - - my $s = "forkcall stats: $call '$line' "; - $s .= "${msecs}mS"; - dbg($s); -} # Punt off a long running command into a separate process # @@ -1309,20 +1293,32 @@ sub spawn_cmd my $t0 = [gettimeofday]; no strict 'refs'; - - my $fc = Mojo::IOLoop::ForkCall->new; - $fc->serializer(\&encode_json); - $fc->deserializer(\&decode_json); + + # just behave normally if something has set the "one-shot" _nospawn in the channel + return ($cmdref->(@$args)) if $self->{_nospawn}; + + my $fc = Mojo::IOLoop::Subprocess->new; +# $fc->serializer(\&encode_json); +# $fc->deserializer(\&decode_json); $fc->run( - sub {my @args = @_; my @res = $cmdref->(@args); return @res}, - $args, + sub { + my $subpro = shift; + if (isdbg('spawn_cmd')) { + my $s = "line: $line"; + $s .= ", args: " . join(', ', @$args) if $args && @$args; + } + my @res = $cmdref->(@$args); +# diffms("rcmd from $call 1", $line, $t0, scalar @res) if isdbg('chan'); + return @res; + }, +# $args, sub { my ($fc, $err, @res) = @_; my $dxchan = DXChannel::get($call); return unless $dxchan; - if (defined $err) { - my $s = "DXCommand::spawn_cmd: call $call error $err"; + if ($err) { + my $s = "DXProt::spawn_cmd: call $call error $err"; dbg($s) if isdbg('chan'); $dxchan->send($s); return; @@ -1338,7 +1334,7 @@ sub spawn_cmd $dxchan->send(@res); } } - _diffms($call, $line, $t0); + diffms("by $call", $line, $t0, scalar @res) if isdbg('chan'); }); return @out;