about summary refs log tree commit homepage
path: root/lib/PublicInbox
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2019-09-27 21:01:01 +0000
committerEric Wong <e@80x24.org>2019-09-27 21:04:48 +0000
commit2fc42236f72ad16a33288f58086edc95da56c612 (patch)
treeba55eb23f905c5416c0f10942aaea0af68f8a96a /lib/PublicInbox
parent2052e92ba1f75efca6935558ea01898d01751f40 (diff)
downloadpublic-inbox-2fc42236f72ad16a33288f58086edc95da56c612.tar.gz
The httpd-supplied write callback is the leak culprit under Perl
5.16.3.  undef-ing it immediately after use keeps a repeated
"git fetch" loop from monotonically increasing memory and FD use
on the Perl shipped with RHEL/CentOS 7.x.

Other endpoints tested showed no increase in memory use under
constant load with "ab -HAccept-Encoding:gzip -k", including the
async psgi_qx code path used by $INBOX_URL/$OBJECT_ID/s/ via
SolverGit module.
Diffstat (limited to 'lib/PublicInbox')
-rw-r--r--lib/PublicInbox/Qspawn.pm4
1 files changed, 4 insertions, 0 deletions
diff --git a/lib/PublicInbox/Qspawn.pm b/lib/PublicInbox/Qspawn.pm
index 5a300644..cb3dc516 100644
--- a/lib/PublicInbox/Qspawn.pm
+++ b/lib/PublicInbox/Qspawn.pm
@@ -281,6 +281,10 @@ sub psgi_return {
                                                                 $buf, $filter);
                         $wcb->($r);
                 }
+
+                # Workaround a leak under Perl 5.16.3 when combined with
+                # Plack::Middleware::Deflater:
+                $wcb = undef;
         };
         $limiter ||= $def_limiter ||= PublicInbox::Qspawn::Limiter->new(32);
         my $start_cb = sub { # may run later, much later...