about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2024-01-09 11:39:23 +0000
committerEric Wong <e@80x24.org>2024-01-10 10:26:55 +0000
commitc3991bba13a63a40391cfcdeace638a50bcc1c0c (patch)
tree35b865ef309ff48e93ba5490d935364b292e5001
parent3ee535737524782b6e0d392d5a526b63a0b878f2 (diff)
downloadpublic-inbox-c3991bba13a63a40391cfcdeace638a50bcc1c0c.tar.gz
I'm not sure how this happens (perl 5.34.1 on FreeBSD 13.2)
but it appears the {sock} check can succeed and then go undef
and become unable to call ->owner_pid.

This happens when libgit2 is in use, so perhaps that's a factor.
In any case, the rest of the tests succeed.
-rw-r--r--lib/PublicInbox/Git.pm11
1 files changed, 10 insertions, 1 deletions
diff --git a/lib/PublicInbox/Git.pm b/lib/PublicInbox/Git.pm
index 6c4fcf93..7b991c6b 100644
--- a/lib/PublicInbox/Git.pm
+++ b/lib/PublicInbox/Git.pm
@@ -208,8 +208,17 @@ sub cat_async_retry ($$) {
 
 sub gcf_inflight ($) {
         my ($self) = @_;
+        # FIXME: the first {sock} check can succeed but Perl can complain
+        # about calling ->owner_pid on an undefined value.  Not sure why or
+        # how this happens but t/imapd.t can complain about it, sometimes.
         if ($self->{sock}) {
-                return $self->{inflight} if $self->{sock}->owner_pid == $$;
+                if (eval { $self->{sock}->owner_pid == $$ }) {
+                        return $self->{inflight};
+                } elsif ($@) {
+                        no warnings 'uninitialized';
+                        warn "E: $self sock=$self->{sock}: owner_pid failed: ".
+                                "$@ (continuing...)";
+                }
                 delete @$self{qw(sock inflight)};
         } else {
                 $self->close;