From da143a9393faa4956403b3f7a4c6ecb5ae3bcf01 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Fri, 5 Feb 2021 05:13:54 +0500 Subject: httpd/async: set O_NONBLOCK correctly While Perl tie is nice for some things, getting IO::Handle->blocking to work transparently with it doesn't seem possible at the moment. Add some examples in t/spawn.t for future hackers. Fixes: 22e51bd9da476fa9 ("qspawn: switch to ProcessPipe via popen_rd") --- lib/PublicInbox/HTTPD/Async.pm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'lib') 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); } -- cgit v1.2.3-24-ge0c7