]> Sergey Matveev's repositories - public-inbox.git/commitdiff
qspawn: fix EINTR with generic PSGI servers
authorEric Wong <e@80x24.org>
Fri, 6 Jan 2023 10:10:53 +0000 (10:10 +0000)
committerEric Wong <e@80x24.org>
Fri, 6 Jan 2023 10:24:17 +0000 (10:24 +0000)
Using the `next' operator doesn't work with `do {} (until|while)'
loops, so change it to use `until {}'.  I've never encountered
this problem in-the-wild, but I only use -(netd|httpd).

lib/PublicInbox/Qspawn.pm

index 5d3ec30926cdb5be848c0a38df738428af4ecbc9..f2beb4b21febc96f8a22862f835a3ffc1244e405 100644 (file)
@@ -201,7 +201,7 @@ sub rd_hdr ($) {
        my $total_rd = 0;
        my $hdr_buf = $self->{hdr_buf};
        my ($ph_cb, $ph_arg) = @{$self->{parse_hdr}};
-       do {
+       until (defined($ret)) {
                my $r = sysread($self->{rpipe}, $$hdr_buf, 4096,
                                length($$hdr_buf));
                if (defined($r)) {
@@ -225,7 +225,7 @@ EOM
                        warn "error reading header: $!";
                        $ret = [ 500, [], [ "Internal error\n" ] ];
                }
-       } until (defined $ret);
+       }
        delete $self->{parse_hdr}; # done parsing headers
        $ret;
 }