diff options
Diffstat (limited to 'lib/PublicInbox/PktOp.pm')
-rw-r--r-- | lib/PublicInbox/PktOp.pm | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/lib/PublicInbox/PktOp.pm b/lib/PublicInbox/PktOp.pm index dc432307..1bcdd799 100644 --- a/lib/PublicInbox/PktOp.pm +++ b/lib/PublicInbox/PktOp.pm @@ -1,4 +1,4 @@ -# Copyright (C) 2021 all contributors <meta@public-inbox.org> +# Copyright (C) all contributors <meta@public-inbox.org> # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt> # op dispatch socket, reads a message, runs a sub @@ -6,8 +6,7 @@ # Used for lei_xsearch and maybe other things # "command" => [ $sub, @fixed_operands ] package PublicInbox::PktOp; -use strict; -use v5.10.1; +use v5.12; use parent qw(PublicInbox::DS); use Errno qw(EAGAIN ECONNRESET); use PublicInbox::Syscall qw(EPOLLIN); @@ -55,7 +54,15 @@ sub event_step { my $op = $self->{ops}->{$cmd //= $msg}; if ($op) { my ($obj, @args) = (@$op, @pargs); - blessed($obj) ? $obj->$cmd(@args) : $obj->(@args); + if (blessed($args[0]) && $args[0]->can('do_env')) { + my $lei = shift @args; + $lei->do_env($obj, @args); + } elsif (blessed($obj)) { + $obj->can('do_env') ? $obj->do_env($cmd, @args) + : $obj->$cmd(@args); + } else { + $obj->(@args); + } } elsif ($msg ne '') { die "BUG: unknown message: `$cmd'"; } |