Subject: | IO::Async::Routine pipepairs are in blocking mode |
As mentioned in IRC:
The pipepair created in IO::Async::Routine does not seem to have any explicit step which sets up nonblocking mode. There are a few places where this might be reasonably expected to happen - https://metacpan.org/release/IO-Async/source/lib/IO/Async/Channel.pm#L397 or https://metacpan.org/release/IO-Async/source/lib/IO/Async/Channel.pm#L409 for example - but currently, the writing pipe ends up in blocking mode and so the entire loop can get stuck in a syscall leading to deadlock.
An example scenario that may work as a test case:
- set up a listener in the parent process
- create an IO::Async::Function which pings the parent listener before completion
- call the ::Function with lots of data
- the parent will block trying to write the data to the child
- the child will block waiting for the response from the parent listener