]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/LeiXSearch.pm
lei q: eliminate $not_done temporary git dir hack
[public-inbox.git] / lib / PublicInbox / LeiXSearch.pm
index e7f0ef6369e3d6fa400ad332a97314357c5e9ee9..2dc44414b29f12b17ffc4ccaaa8b6be7069bb4cb 100644 (file)
@@ -287,12 +287,15 @@ sub query_remote_mboxrd {
        $lei->{ovv}->ovv_atexit_child($lei);
 }
 
-sub git {
+# called by LeiOverview::each_smsg_cb
+sub git { $_[0]->{git_tmp} // die 'BUG: caller did not set {git_tmp}' }
+
+sub git_tmp ($) {
        my ($self) = @_;
        my (%seen, @dirs);
-       my $tmp = File::Temp->newdir('lei_xsrch_git-XXXXXXXX', TMPDIR => 1);
-       for my $ibx (@{$self->{shard2ibx} // []}) {
-               my $d = File::Spec->canonpath($ibx->git->{git_dir});
+       my $tmp = File::Temp->newdir("lei_xsearch_git.$$-XXXX", TMPDIR => 1);
+       for my $ibxish (locals($self)) {
+               my $d = File::Spec->canonpath($ibxish->git->{git_dir});
                $seen{$d} //= push @dirs, "$d/objects\n"
        }
        my $git_dir = $tmp->dirname;
@@ -428,6 +431,11 @@ sub do_query {
                # 1031: F_SETPIPE_SZ
                fcntl($lei->{startq}, 1031, 4096) if $^O eq 'linux';
        }
+       if (!$lei->{opt}->{thread} && locals($self)) { # for query_mset
+               # lei->{git_tmp} is set for wq_wait_old so we don't
+               # delete until all lei2mail + lei_xsearch workers are reaped
+               $lei->{git_tmp} = $self->{git_tmp} = git_tmp($self);
+       }
        $self->wq_workers_start('lei_xsearch', $self->{jobs},
                                $lei->oldset, { lei => $lei });
        my $op = delete $lei->{pkt_op_c};