about summary refs log tree commit homepage
diff options
context:
space:
mode:
-rw-r--r--lib/PublicInbox/HTTPD/Async.pm3
-rw-r--r--t/spawn.t5
2 files changed, 7 insertions, 1 deletions
diff --git a/lib/PublicInbox/HTTPD/Async.pm b/lib/PublicInbox/HTTPD/Async.pm
index bd1fd8fa..1de9501d 100644
--- a/lib/PublicInbox/HTTPD/Async.pm
+++ b/lib/PublicInbox/HTTPD/Async.pm
@@ -37,7 +37,8 @@ sub new {
                 arg => $arg, # arg for $cb
                 end_obj => $end_obj, # like END{}, can ->event_step
         }, $class;
-        IO::Handle::blocking($io, 0);
+        my $pp = tied *$io;
+        $pp->{fh}->blocking(0) // die "$io->blocking(0): $!";
         $self->SUPER::new($io, EPOLLIN | EPOLLET);
 }
 
diff --git a/t/spawn.t b/t/spawn.t
index 0eed79bb..6f811ec1 100644
--- a/t/spawn.t
+++ b/t/spawn.t
@@ -77,6 +77,11 @@ EOF
 {
         my $fh = popen_rd([qw(printf foo\nbar)]);
         ok(fileno($fh) >= 0, 'tied fileno works');
+        my $tfh = (tied *$fh)->{fh};
+        is($tfh->blocking(0), 1, '->blocking was true');
+        is($tfh->blocking, 0, '->blocking is false');
+        is($tfh->blocking(1), 0, '->blocking was true');
+        is($tfh->blocking, 1, '->blocking is true');
         my @line = <$fh>;
         is_deeply(\@line, [ "foo\n", 'bar' ], 'wantarray works on readline');
 }