From 2809f508ee2d616cb36baca19ebffd4ee87f5291 Mon Sep 17 00:00:00 2001 From: Tony Arcieri Date: Thu, 7 Jan 2010 15:02:24 -0700 Subject: A bit less retarded usage of threads --- lib/systemu.rb | 28 ++++++++++++++-------------- 1 file 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 -- cgit v1.2.1