diff options
author | Eric Wong <e@80x24.org> | 2016-07-09 03:18:34 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2016-07-09 03:20:24 +0000 |
commit | f89bd1444a595b569606679293d2d01b0b7a049e (patch) | |
tree | fbb8007c319f0655adbc1245dfff48bd441c720f /lib/PublicInbox/GitHTTPBackend.pm | |
parent | 239514fd687eb88d023b67de1daccaf2e440e884 (diff) | |
download | public-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.pm | 6 |
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) { |