- (__WARN__ => sub { err($self, @_) },
- PIPE => sub {
- $self->x_it(13); # SIGPIPE = 13
- # we need to close explicitly to avoid Perl warning on SIGPIPE
- for my $i (1, 2) {
- next unless $self->{$i} && (-p $self->{$i} || -S _);
- close(delete $self->{$i});
- }
- # trigger the LeiXSearch $done OpPipe:
- syswrite($self->{0}, '!') if $self->{0} && -p $self->{0};
- $SIG{PIPE} = 'DEFAULT';
- die bless(\"$_[0]", 'PublicInbox::SIGPIPE'),
- });
-}
-
-# usage: ($lei, @io) = $lei->atfork_parent_wq($wq);
-sub atfork_parent_wq {
- my ($self, $wq) = @_;
- my $env = delete $self->{env}; # env is inherited at fork
- my $ret = bless { %$self }, ref($self);
- if (my $dedupe = delete $ret->{dedupe}) {
- $ret->{dedupe} = $wq->deep_clone($dedupe);
- }
- $self->{env} = $env;
- delete @$ret{qw(-lei_store cfg old_1 pgr lxs)}; # keep l2m
- my @io = delete @$ret{0..2};
- $io[3] = delete($ret->{sock}) // $io[2];
- my $l2m = $ret->{l2m};
- if ($l2m && $l2m != $wq) { # $wq == lxs
- $io[4] = $l2m->{-wq_s1} if $l2m->{-wq_s1};
- $l2m->wq_close(1);
- }
- ($ret, @io);