You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Piping from a stream that has already reached EOF #36
I am not sure if this is actually an issue, but if you pipe from a stream that has already reached EOF (or closed some other way) pipe will cause the loop to never exit because no events are sent - or will ever be sent - to the destination stream.
It seems that it would be better for pipe to close the destination stream if isReadable is false.
Reproduce:
<?phprequire_once__DIR__ . '/vendor/autoload.php';
system('echo Testing > somefile.txt');
$loop = \React\EventLoop\Factory::create();
$readStream = new \React\Stream\Stream(fopen("somefile.txt", "r"), $loop);
$loop->addTimer(1, function () use ($loop, $readStream) {
$output = new \React\Stream\Stream(STDOUT, $loop);
$readStream->pipe($output);
});
$loop->run();
It seems that it would be better for pipe to close the destination stream if isReadable is false.
Thanks for spotting 👍 I think the suggested change makes perfect the sense and I would consider the current behavior a bug.
The default behavior of pipe() is to end() the destination stream once the source stream also ends (though this can be controlled by the user). In this case it also makes sense to close the destination stream immediately if the the source stream is already closed at the beginning.
Note that the problem you're observing is also conflated with #37 because your $output stream is actually assumed to be a duplex stream by default. If you call $output->pause(), then the output stream will still not end (arguably incorrect), but the loop should exit (correct).
Activity
clue commentedon Feb 13, 2016
Thanks for spotting 👍 I think the suggested change makes perfect the sense and I would consider the current behavior a bug.
The default behavior of
pipe()is toend()the destination stream once the source stream also ends (though this can be controlled by the user). In this case it also makes sense to close the destination stream immediately if the the source stream is already closed at the beginning.Note that the problem you're observing is also conflated with #37 because your
$outputstream is actually assumed to be a duplex stream by default. If you call$output->pause(), then the output stream will still not end (arguably incorrect), but the loop should exit (correct).