Ben Browning created JRUBY-6418:
-----------------------------------
Summary: CLONE - Closing One Stream From IO.popen4 Results in
Stream Closed Error When Reading Other Streams
Key: JRUBY-6418
URL: https://jira.codehaus.org/browse/JRUBY-6418
Project: JRuby
Issue Type: Bug
Affects Versions: JRuby 1.7
Environment: Java 6
Reporter: Ben Browning
Assignee: Charles Oliver Nutter
Fix For: JRuby 1.7
The small snippet below results in an {{IOError: Stream closed}} on the
{{stdout_io.each_line}} line. Removing the {{stdin.close}} gets rid of the
error.
{code}
IO.popen4("ls") do |pid, stdin, stdout, stderr|
stdin.close
[
Thread.new(stdout) {|stdout_io|
stdout_io.each_line do |l|
STDOUT.puts l
STDOUT.flush
end
stdout_io.close
},
Thread.new(stderr) {|stderr_io|
stderr_io.each_line do |l|
STDERR.puts l
STDERR.flush
end
}
].each( &:join )
end
{code}
RubyIO's close2 method has code to destroy any spawned processes associated
with an IO object that gets closed. So, the workaround is to not close any of
the IO streams until the process has finished or the program has finished
consuming the process output. See:
https://github.com/jruby/jruby/blob/master/src/org/jruby/RubyIO.java#L3810
https://github.com/jruby/jruby/blob/master/src/org/jruby/RubyIO.java#L2002
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://jira.codehaus.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email