about summary refs log tree commit homepage
diff options
context:
space:
mode:
-rw-r--r--lib/PublicInbox/Git.pm7
-rw-r--r--lib/PublicInbox/SolverGit.pm3
2 files changed, 9 insertions, 1 deletions
diff --git a/lib/PublicInbox/Git.pm b/lib/PublicInbox/Git.pm
index fe834210..7c6e15b7 100644
--- a/lib/PublicInbox/Git.pm
+++ b/lib/PublicInbox/Git.pm
@@ -628,10 +628,15 @@ sub event_step {
         }
 }
 
+sub schedule_cleanup {
+        my ($self) = @_;
+        PublicInbox::DS::add_uniq_timer($self+0, 30, \&cleanup, $self, 1);
+}
+
 # idempotently registers with DS epoll/kqueue/select/poll
 sub watch_async ($) {
         my ($self) = @_;
-        PublicInbox::DS::add_uniq_timer($self+0, 30, \&cleanup, $self, 1);
+        schedule_cleanup($self);
         $self->{epwatch} //= do {
                 $self->SUPER::new($self->{sock}, EPOLLIN);
                 \undef;
diff --git a/lib/PublicInbox/SolverGit.pm b/lib/PublicInbox/SolverGit.pm
index ba3c94cb..7cc10198 100644
--- a/lib/PublicInbox/SolverGit.pm
+++ b/lib/PublicInbox/SolverGit.pm
@@ -82,7 +82,10 @@ sub solve_existing ($$) {
         my $try = $want->{try_gits} //= [ @{$self->{gits}} ]; # array copy
         my $git = shift @$try or die 'BUG {try_gits} empty';
         my $oid_b = $want->{oid_b};
+
+        # can't use async_check due to last_check_err :<
         my ($oid_full, $type, $size) = $git->check($oid_b);
+        $git->schedule_cleanup if $self->{psgi_env}->{'pi-httpd.async'};
 
         if ($oid_b eq ($oid_full // '') || (defined($type) &&
                                 (!$self->{have_hints} || $type eq 'blob'))) {