Default async stream write implementation broken for blocking unix pipes
Async writes to a GUnixOutputStream are handled by the default implementation g_pollable_output_stream_default_write_nonblocking(). This assumes that if g_pollable_output_stream_is_writable() returns TRUE, then the sync write operation will not block (but possibly do a partial write).
However, for unix pipes this is not true. They will block anyway if the available space in the pipe is smaller than the write count. Unless O_NONBLOCK is set, then it will do a partial write.
I believe there is a similar issues for sockets too, but we create O_NONBLOCK sockets by default, so its not going to be as much of a problem there. However, most pipes are blocking, and in fact apps may rely on the atomic write guarantees of pipes in ways they can't really do with socket writes.
This was noticed in the context of #2182 (closed) but that could be solved locally to GSubprocess. The general problem can not though.