sub x_it ($$) { # pronounced "exit"
my ($self, $code) = @_;
$self->{1}->autoflush(1); # make sure client sees stdout before exit
- if (my $sig = ($code & 127)) {
- kill($sig, $self->{pid} // $$);
- } else {
- $code >>= 8;
- if (my $sock = $self->{sock}) {
- say $sock "exit=$code";
- } else { # for oneshot
- $quit->($code);
- }
+ my $sig = ($code & 127);
+ $code >>= 8 unless $sig;
+ if (my $sock = $self->{sock}) {
+ say $sock "exit=$code";
+ } else { # for oneshot
+ $quit->($code);
}
}
say $sock "request command truncated";
return;
}
- my ($client_pid, $argc, @argv) = split(/\0/, $buf, -1);
+ my ($argc, @argv) = split(/\0/, $buf, -1);
undef $buf;
my %env = map { split(/=/, $_, 2) } splice(@argv, $argc);
if (chdir($env{PWD})) {
local %ENV = %env;
$self->{env} = \%env;
- $self->{pid} = $client_pid + 0;
eval { dispatch($self, @argv) };
say $sock $@ if $@;
} else {
}
my $j = $opt->{jobs} // scalar(@srcs) > 4 ? 4 : scalar(@srcs);
$j = 1 if !$opt->{thread};
- if ($self->{pid}) {
+ if ($self->{sock}) {
$lxs->wq_workers_start('lei_xsearch', $j, $self->oldset)
// $self->wq_workers($j);
}
1;
}) { # (Socket::MsgHdr|IO::FDPass|Inline::C), $sock, $pwd are all available:
local $ENV{PWD} = $pwd;
- my $buf = join("\0", $$, scalar(@ARGV), @ARGV);
+ my $buf = join("\0", scalar(@ARGV), @ARGV);
while (my ($k, $v) = each %ENV) { $buf .= "\0$k=$v" }
$buf .= "\0\0";
select $sock;