summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTony Arcieri <tony@medioh.com>2010-01-07 15:02:24 -0700
committerTony Arcieri <tony@medioh.com>2010-01-07 15:02:24 -0700
commit2809f508ee2d616cb36baca19ebffd4ee87f5291 (patch)
tree8d27aa8ea61500ab209f94fafb2a347596db5575
parent3f73cd3655cf47e3c9acdf06bd0f1bc989f41505 (diff)
downloadsystemu-2809f508ee2d616cb36baca19ebffd4ee87f5291.tar.gz
A bit less retarded usage of threads
-rw-r--r--lib/systemu.rb28
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