about summary refs log tree commit homepage
path: root/lib/PublicInbox/GitHTTPBackend.pm
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2016-07-09 03:18:34 +0000
committerEric Wong <e@80x24.org>2016-07-09 03:20:24 +0000
commitf89bd1444a595b569606679293d2d01b0b7a049e (patch)
treefbb8007c319f0655adbc1245dfff48bd441c720f /lib/PublicInbox/GitHTTPBackend.pm
parent239514fd687eb88d023b67de1daccaf2e440e884 (diff)
downloadpublic-inbox-f89bd1444a595b569606679293d2d01b0b7a049e.tar.gz
And bump the default limit to 32 so we match git-daemon
behavior.  This shall allow us to configure different levels
of concurrency for different repositories and prevent clones
of giant repos from stalling service to small repos.
Diffstat (limited to 'lib/PublicInbox/GitHTTPBackend.pm')
-rw-r--r--lib/PublicInbox/GitHTTPBackend.pm6
1 files changed, 5 insertions, 1 deletions
diff --git a/lib/PublicInbox/GitHTTPBackend.pm b/lib/PublicInbox/GitHTTPBackend.pm
index ebb0850a..ed8fdf00 100644
--- a/lib/PublicInbox/GitHTTPBackend.pm
+++ b/lib/PublicInbox/GitHTTPBackend.pm
@@ -13,6 +13,9 @@ use HTTP::Status qw(status_message);
 use Plack::Util;
 use PublicInbox::Qspawn;
 
+# 32 is same as the git-daemon connection limit
+my $default_limiter = PublicInbox::Qspawn::Limiter->new(32);
+
 # n.b. serving "description" and "cloneurl" should be innocuous enough to
 # not cause problems.  serving "config" might...
 my @text = qw[HEAD info/refs
@@ -176,6 +179,7 @@ sub prepare_range {
 # returns undef if 403 so it falls back to dumb HTTP
 sub serve_smart {
         my ($env, $git, $path) = @_;
+        my $limiter = $default_limiter;
         my $in = $env->{'psgi.input'};
         my $fd = eval { fileno($in) };
         unless (defined $fd && $fd >= 0) {
@@ -248,7 +252,7 @@ sub serve_smart {
                 # holding the input here is a waste of FDs and memory
                 $env->{'psgi.input'} = undef;
 
-                $x->start(sub { # may run later, much later...
+                $x->start($limiter, sub { # may run later, much later...
                         ($rpipe) = @_;
                         $in = undef;
                         if ($async) {