]> Sergey Matveev's repositories - public-inbox.git/commitdiff
lei: do not wait for sto->done on disconnected EOF
authorEric Wong <e@80x24.org>
Tue, 16 Aug 2022 03:44:03 +0000 (03:44 +0000)
committerEric Wong <e@80x24.org>
Tue, 16 Aug 2022 03:46:45 +0000 (03:46 +0000)
lei-daemon (the top-level daemon process) should not have
synchronous waits, and this was causing a deadlock with
interrupted commands.  There may still be a bug lurking in
lei/store despite this fix, though.  I originally thought commit
fd261b9e65674505 (lei_store_err: use level-trigger for error pipe, 2022-08-15)
was sufficient, but at least this change is needed, as well.

lib/PublicInbox/LEI.pm

index d81ca296250b493f4e05e1c00bcd2b7bb74781c3..595b3fa9885fa51fe197b449c010a96a511fb35a 100644 (file)
@@ -1520,13 +1520,10 @@ sub sto_done_request {
        return unless $lei->{sto};
        local $current_lei = $lei;
        my $sock = $wq ? $wq->{lei_sock} : undef;
-       eval {
-               if ($sock //= $lei->{sock}) { # issue, async wait
-                       $lei->{sto}->wq_io_do('done', [ $sock ]);
-               } else { # forcibly wait
-                       my $wait = $lei->{sto}->wq_do('done');
-               }
-       };
+       $sock //= $lei->{sock};
+       my @io;
+       push(@io, $sock) if $sock; # async wait iff possible
+       eval { $lei->{sto}->wq_io_do('done', \@io) };
        warn($@) if $@;
 }