about summary refs log tree commit homepage
path: root/lib/PublicInbox/Git.pm
diff options
context:
space:
mode:
authorEric Wong <e@yhbt.net>2020-06-10 07:04:20 +0000
committerEric Wong <e@yhbt.net>2020-06-13 07:55:45 +0000
commitba31b0f3e2314817536d4217e86b9ac280187b01 (patch)
tree2fdfc8b9355dee21f2e458e0eeb0f3ea36af39d8 /lib/PublicInbox/Git.pm
parent05978869826c50252d49a7977470ee3107eb2d16 (diff)
downloadpublic-inbox-ba31b0f3e2314817536d4217e86b9ac280187b01.tar.gz
Small array refs have considerable overhead in Perl, so reduce
AV/SV overhead and instead allow the inflight array to grow
twice as large.
Diffstat (limited to 'lib/PublicInbox/Git.pm')
-rw-r--r--lib/PublicInbox/Git.pm8
1 files changed, 4 insertions, 4 deletions
diff --git a/lib/PublicInbox/Git.pm b/lib/PublicInbox/Git.pm
index 8426cc7d..e1d5c386 100644
--- a/lib/PublicInbox/Git.pm
+++ b/lib/PublicInbox/Git.pm
@@ -18,7 +18,7 @@ use base qw(Exporter);
 our @EXPORT_OK = qw(git_unquote git_quote);
 
 use constant MAX_INFLIGHT =>
-        ($^O eq 'linux' ? 4096 : POSIX::_POSIX_PIPE_BUF())
+        (($^O eq 'linux' ? 4096 : POSIX::_POSIX_PIPE_BUF()) * 2)
         /
         65; # SHA-256 hex size + "\n" in preparation for git using non-SHA1
 
@@ -135,8 +135,8 @@ sub read_cat_in_full ($$) {
 
 sub _cat_async_step ($$) {
         my ($self, $inflight) = @_;
-        my $pair = shift @$inflight or die 'BUG: inflight empty';
-        my ($cb, $arg) = @$pair;
+        die 'BUG: inflight empty or odd' if scalar(@$inflight) < 2;
+        my ($cb, $arg) = splice(@$inflight, 0, 2);
         local $/ = "\n";
         my $head = readline($self->{in});
         $head =~ / missing$/ and return
@@ -314,7 +314,7 @@ sub cat_async ($$$;$) {
         }
 
         print { $self->{out} } $oid, "\n" or fail($self, "write error: $!");
-        push(@$inflight, [ $cb, $arg ]);
+        push(@$inflight, $cb, $arg);
 }
 
 sub extract_cmt_time {