# New Ticket Created by Sam S. # Please include the string: [perl #129882] # in the subject line of all future correspondence about this issue. # <URL: https://rt.perl.org/Ticket/Display.html?id=129882 >
The following code attempts to pipe a large Blob (larger than a pipe's buffer size) through an external command. However, it hangs on the `.in.close` line and never finishes: my $proc = run «cat -», :in, :out, :bin; my $input = ("a" x 1000000).encode; my $promise = start { $proc.in.write: $input; $proc.in.close; } say $proc.out.slurp-rest(:close, :bin).bytes; await $promise; More verbose version of the code with debug output showing where it blocks: https://gist.github.com/smls/75518c746ca65b3287482c491971eac0 IRC comments: <timotimo> moar sometimes gets confused, i think <timotimo> or maybe it's libuv <RabidGravy> shouldn't that give an error as other handles across threads do? <gfldex> you get the same behaviour with https://rt.perl.org/Public/Bug/Display.html?id=129787 Note that without the `start` (i.e. when writing to `.in` and then reading from `.out` in the same thread), it already hangs on the `.in.write`, as geekosaur explains: <geekosaur> it will block if the process is not reading, yes. pipes have finite buffer space <geekosaur> whether this block is happening at OS level or if libuv is supposed to be using non-blocking operations and return a "would block, try again" and some higher level is blocking based on that, I cannot say