]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/Qspawn.pm
www*stream: gzip ->getline responses
[public-inbox.git] / lib / PublicInbox / Qspawn.pm
index 34b6912fea558dd01ee924f463e180f946fd26e1..d395a10b3b156b1fac05facbad8a4eca04ef44c2 100644 (file)
@@ -48,7 +48,7 @@ sub _do_spawn {
        my ($cmd, $cmd_env, $opt) = @{delete $self->{args}};
        my %o = %{$opt || {}};
        $self->{limiter} = $limiter;
-       foreach my $k (PublicInbox::Spawn::RLIMITS()) {
+       foreach my $k (@PublicInbox::Spawn::RLIMITS) {
                if (defined(my $rlimit = $limiter->{$k})) {
                        $o{$k} = $rlimit;
                }
@@ -234,7 +234,11 @@ sub rd_hdr ($) {
                                length($$hdr_buf));
                if (defined($r)) {
                        $total_rd += $r;
-                       $ret = $ph_cb->($total_rd, $hdr_buf, $ph_arg);
+                       eval { $ret = $ph_cb->($total_rd, $hdr_buf, $ph_arg) };
+                       if ($@) {
+                               log_err($self->{psgi_env}, "parse_hdr: $@");
+                               $ret = [ 500, [], [ "Internal error\n" ] ];
+                       }
                } else {
                        # caller should notify us when it's ready:
                        return if $! == EAGAIN;
@@ -277,10 +281,6 @@ sub psgi_return_init_cb {
                                        ${$self->{hdr_buf}}, $filter);
                $wcb->($r);
        }
-
-       # Workaround a leak under Perl 5.16.3 when combined with
-       # Plack::Middleware::Deflater:
-       $wcb = undef;
 }
 
 sub psgi_return_start { # may run later, much later...
@@ -358,7 +358,7 @@ sub new {
 
 sub setup_rlimit {
        my ($self, $name, $config) = @_;
-       foreach my $rlim (PublicInbox::Spawn::RLIMITS()) {
+       foreach my $rlim (@PublicInbox::Spawn::RLIMITS) {
                my $k = lc($rlim);
                $k =~ tr/_//d;
                $k = "publicinboxlimiter.$name.$k";