]> Sergey Matveev's repositories - public-inbox.git/commitdiff
lei: oneshot: preserve stdout if writing mbox
authorEric Wong <e@80x24.org>
Sat, 23 Jan 2021 10:27:49 +0000 (10:27 +0000)
committerEric Wong <e@80x24.org>
Sat, 23 Jan 2021 23:45:28 +0000 (23:45 +0000)
We still need stdout if launching an MUA.

lib/PublicInbox/LEI.pm
lib/PublicInbox/LeiToMail.pm
lib/PublicInbox/LeiXSearch.pm

index f6bc920d4cae9cecf849eb648683703b881eb93e..ba744ef36de5238845eb18ab6e2269e534e2060a 100644 (file)
@@ -298,6 +298,9 @@ sub atfork_prepare_wq {
        if (my $pgr = $self->{pgr}) {
                push @$tcafc, @$pgr[1,2];
        }
+       if (my $old_1 = $self->{old_1}) {
+               push @$tcafc, $old_1;
+       }
        for my $f (qw(lxs l2m)) {
                my $ipc = $self->{$f} or next;
                push @$tcafc, grep { defined }
@@ -340,7 +343,7 @@ sub atfork_parent_wq {
                $ret->{dedupe} = $wq->deep_clone($dedupe);
        }
        $self->{env} = $env;
-       delete @$ret{qw(-lei_store cfg pgr lxs)}; # keep l2m
+       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};
index 438fb17582d9400467e0ffff9118e252795587c0..5f38add1179c946e4209b73527ce656da25e219c 100644 (file)
@@ -405,6 +405,7 @@ sub _pre_augment_mbox {
                        $! == ENOENT or die "unlink($dst): $!";
                }
                open my $out, $mode, $dst or die "open($dst): $!";
+               $lei->{old_1} = $lei->{1};
                $lei->{1} = $out;
        }
        # Perl does SEEK_END even with O_APPEND :<
index d32fe09afa5fe51414dab17b2235ab739bbcc0ae..8d36bca96b17285830beb37cf67978e9fc36dfe4 100644 (file)
@@ -252,7 +252,14 @@ sub query_done { # EOF callback
        }
        $lei->{ovv}->ovv_end($lei);
        if ($has_l2m) { # close() calls LeiToMail reap_compress
-               close(delete($lei->{1})) if $lei->{1};
+               if (my $out = delete $lei->{old_1}) {
+                       if (my $mbout = $lei->{1}) {
+                               close($mbout) or return $lei->fail(<<"");
+Error closing $lei->{ovv}->{dst}: $!
+
+                       }
+                       $lei->{1} = $out;
+               }
                $lei->start_mua;
        }
        $lei->dclose;