From 133c9c61c0fe7e0e2d8d00e9935b3433b806ddc7 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sat, 10 Sep 2022 08:16:53 +0000 Subject: www: gzip_filter: implicitly flush {obuf} on zmore/zflush This seems like the least disruptive way to allow more use of ->zmore when streaming large messages to sockets. --- lib/PublicInbox/CompressNoop.pm | 4 ++-- lib/PublicInbox/GzipFilter.pm | 9 +++++---- lib/PublicInbox/ViewVCS.pm | 2 -- 3 files changed, 7 insertions(+), 8 deletions(-) (limited to 'lib/PublicInbox') diff --git a/lib/PublicInbox/CompressNoop.pm b/lib/PublicInbox/CompressNoop.pm index e3301473..5135299f 100644 --- a/lib/PublicInbox/CompressNoop.pm +++ b/lib/PublicInbox/CompressNoop.pm @@ -1,4 +1,4 @@ -# Copyright (C) 2020-2021 all contributors +# Copyright (C) all contributors # License: AGPL-3.0+ # Provide the same methods as Compress::Raw::Zlib::Deflate but @@ -10,7 +10,7 @@ use Compress::Raw::Zlib qw(Z_OK); sub new { bless \(my $self), __PACKAGE__ } sub deflate { # ($self, $input, $output) - $_[2] .= $_[1]; + $_[2] .= ref($_[1]) ? ${$_[1]} : $_[1]; Z_OK; } diff --git a/lib/PublicInbox/GzipFilter.pm b/lib/PublicInbox/GzipFilter.pm index 86d34183..75ba625e 100644 --- a/lib/PublicInbox/GzipFilter.pm +++ b/lib/PublicInbox/GzipFilter.pm @@ -140,8 +140,8 @@ sub zmore { my $self = $_[0]; # $_[1] => input http_out($self); my $err; - for (1..$#_) { - $err = $self->{gz}->deflate($_[$_], $self->{zbuf}); + for (delete $self->{obuf}, @_[1..$#_]) { + $err = $self->{gz}->deflate($_ // next, $self->{zbuf}); die "gzip->deflate: $err" if $err != Z_OK; } undef; @@ -153,8 +153,9 @@ sub zflush ($;@) { my $zbuf = delete $self->{zbuf}; my $gz = delete $self->{gz}; my $err; - for (1..$#_) { # it's a bug iff $gz is undef w/ $_[1..] - $err = $gz->deflate($_[$_], $zbuf); + # it's a bug iff $gz is undef w/ $obuf or $_[1..] + for (delete $self->{obuf}, @_[1..$#_]) { + $err = $gz->deflate($_ // next, $zbuf); die "gzip->deflate: $err" if $err != Z_OK; } $gz // return ''; # not a bug, recursing on DS->write failure diff --git a/lib/PublicInbox/ViewVCS.pm b/lib/PublicInbox/ViewVCS.pm index 3b4fa393..ed4a6454 100644 --- a/lib/PublicInbox/ViewVCS.pm +++ b/lib/PublicInbox/ViewVCS.pm @@ -210,8 +210,6 @@ EOM $x =~ s/\r?\n/\n/gs; $ctx->{-anchors} = {} if $x =~ /^diff --git /sm; flush_diff($ctx, \$x); # undefs $x - $ctx->zmore($bdy); - undef $bdy; # TODO: should there be another textarea which attempts to # search for the exact email which was applied to make this # commit? -- cgit v1.2.3-24-ge0c7