diff options
author | Tony Arcieri <tony@medioh.com> | 2010-01-07 15:02:24 -0700 |
---|---|---|
committer | Tony Arcieri <tony@medioh.com> | 2010-01-07 15:02:24 -0700 |
commit | 2809f508ee2d616cb36baca19ebffd4ee87f5291 (patch) | |
tree | 8d27aa8ea61500ab209f94fafb2a347596db5575 | |
parent | 3f73cd3655cf47e3c9acdf06bd0f1bc989f41505 (diff) | |
download | systemu-2809f508ee2d616cb36baca19ebffd4ee87f5291.tar.gz |
A bit less retarded usage of threads
-rw-r--r-- | lib/systemu.rb | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/lib/systemu.rb b/lib/systemu.rb index 9dbddfc..d5a2a61 100644 --- a/lib/systemu.rb +++ b/lib/systemu.rb @@ -258,32 +258,32 @@ if defined? JRUBY_VERSION process = java.lang.Runtime.runtime.exec split_argv.to_java(:string) stdout, stderr = [process.input_stream, process.error_stream].map do |stream| - reader = StreamReader.new(stream) - reader.run - reader.result + StreamReader.new(stream) end exit_code = process.wait_for - [RubyProcess::RubyStatus.new_process_status(JRuby.runtime, exit_code), stdout, stderr] + [ + RubyProcess::RubyStatus.new_process_status(JRuby.runtime, exit_code), + stdout.join, + stderr.join + ] end class StreamReader def initialize(stream) - @reader = java.io.BufferedReader.new java.io.InputStreamReader.new(stream) - @mutex = Mutex.new @data = "" - end - - def run - Thread.new do - @mutex.synchronize do - while line = @reader.read_line; @data << line << "\n"; end + @thread = Thread.new do + reader = java.io.BufferedReader.new java.io.InputStreamReader.new(stream) + + while line = reader.read_line + @data << line << "\n" end end end - def result - @mutex.synchronize { @data } + def join + @thread.join + @data end end end |