diff options
author | Eric Wong <e@80x24.org> | 2023-12-13 00:50:17 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2023-12-13 09:01:54 +0000 |
commit | 9dd86d2555177f401aa622e391b7b80b5ee5cf1f (patch) | |
tree | c408b5bc5d5673f48dd949d7980a193b4ef5aef7 /lib | |
parent | ee5cf0a3af06184d7f26b5c482855f43b4b727fe (diff) | |
download | public-inbox-9dd86d2555177f401aa622e391b7b80b5ee5cf1f.tar.gz |
Our read buffering only worked well with the stdout buffering on glibc and *BSD libc, but not musl. When reading the stdout of git(1), we are likely to get smaller buffers and require more reads on musl-based systems (tested Alpine Linux 3.19.0). Thus we must prevent ->translate from being called with an empty argument list (denoting EOF). We'll also avoid some local variable assignments while at it and favor the non-OO ->zflush dispatch inside RepoAtom and WwwCoderepo subclasses.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/PublicInbox/RepoAtom.pm | 4 | ||||
-rw-r--r-- | lib/PublicInbox/WwwCoderepo.pm | 6 |
2 files changed, 5 insertions, 5 deletions
diff --git a/lib/PublicInbox/RepoAtom.pm b/lib/PublicInbox/RepoAtom.pm index c1649d0a..ab0f2fcc 100644 --- a/lib/PublicInbox/RepoAtom.pm +++ b/lib/PublicInbox/RepoAtom.pm @@ -43,7 +43,7 @@ sub zflush { $_[0]->SUPER::zflush('</feed>') } # called by GzipFilter->write or GetlineResponse->getline sub translate { my $self = shift; - my $rec = $_[0] // return $self->zflush; # getline + $_[0] // return zflush($self); # getline caller my @out; my $lbuf = delete($self->{lbuf}) // shift; $lbuf .= shift while @_; @@ -87,7 +87,7 @@ xmlns="http://www.w3.org/1999/xhtml"><pre style="white-space:pre-wrap"> } $self->{lbuf} = $lbuf; chomp @out; - $self->SUPER::translate(@out); + @out ? $self->SUPER::translate(@out) : ''; # not EOF, yet } # $REPO/tags.atom endpoint diff --git a/lib/PublicInbox/WwwCoderepo.pm b/lib/PublicInbox/WwwCoderepo.pm index d1354af5..3814f719 100644 --- a/lib/PublicInbox/WwwCoderepo.pm +++ b/lib/PublicInbox/WwwCoderepo.pm @@ -273,7 +273,7 @@ sub zflush { $_[0]->SUPER::zflush('</pre>', $_[0]->_html_end) } # called by GzipFilter->write or GetlineResponse->getline sub translate { my $ctx = shift; - my $rec = $_[0] // return zflush($ctx); # getline + $_[0] // return zflush($ctx); # getline caller my @out; my $fbuf = delete($ctx->{fbuf}) // shift; $fbuf .= shift while @_; @@ -290,8 +290,8 @@ sub translate { $snap_pfx, @snap_fmt); } } - $ctx->{fbuf} = $fbuf; - $ctx->SUPER::translate(@out); + $ctx->{fbuf} = $fbuf; # may be incomplete + @out ? $ctx->SUPER::translate(@out) : ''; # not EOF, yet } sub _refs_parse_hdr { # {parse_hdr} for Qspawn |