diff options
author | Eric Wong <e@80x24.org> | 2024-01-09 11:39:23 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2024-01-10 10:26:55 +0000 |
commit | c3991bba13a63a40391cfcdeace638a50bcc1c0c (patch) | |
tree | 35b865ef309ff48e93ba5490d935364b292e5001 | |
parent | 3ee535737524782b6e0d392d5a526b63a0b878f2 (diff) | |
download | public-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.pm | 11 |
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; |