Index: src/org/jruby/RubyThread.java =================================================================== --- src/org/jruby/RubyThread.java (revision 4841) +++ src/org/jruby/RubyThread.java (working copy) @@ -341,7 +341,7 @@ } @JRubyMethod(name = "join", optional = 1) - public RubyThread join(IRubyObject[] args) { + public IRubyObject join(IRubyObject[] args) { long timeoutMillis = 0; if (args.length > 0) { if (args.length > 1) { @@ -351,7 +351,10 @@ // than or equal to zero returns immediately; returns nil timeoutMillis = (long)(1000.0D * args[0].convertToFloat().getValue()); if (timeoutMillis <= 0) { - return null; + if (threadImpl.isAlive()) { + return getRuntime().getNil(); + } + return this; } } if (isCurrent()) { @@ -372,7 +375,10 @@ if (exitingException != null) { throw exitingException; } - return null; + if (threadImpl.isAlive()) { + return getRuntime().getNil(); + } + return this; } @JRubyMethod(name = "value") Index: build.xml =================================================================== --- build.xml (revision 4841) +++ build.xml (working copy) @@ -413,6 +413,7 @@ ${build.dir}/rubinius-spec/core/proc_spec.rb ${build.dir}/rubinius-spec/core/process_spec.rb ${build.dir}/rubinius-spec/core/regexp_spec.rb +${build.dir}/rubinius-spec/core/thread_spec.rb ${build.dir}/rubinius-spec/core/true_spec.rb ${build.dir}/rubinius-spec/language/array_spec.rb ${build.dir}/rubinius-spec/language/assignment_spec.rb @@ -446,6 +447,7 @@ ${build.dir}/rubinius-spec/core/proc_spec.rb ${build.dir}/rubinius-spec/core/process_spec.rb ${build.dir}/rubinius-spec/core/regexp_spec.rb +${build.dir}/rubinius-spec/core/thread_spec.rb ${build.dir}/rubinius-spec/core/true_spec.rb ${build.dir}/rubinius-spec/language/array_spec.rb ${build.dir}/rubinius-spec/language/assignment_spec.rb @@ -484,6 +486,7 @@ test/externals/rubinius/spec/core/regexp_spec.rb test/externals/rubinius/spec/core/struct_spec.rb test/externals/rubinius/spec/core/symbol_spec.rb +test/externals/rubinius/spec/core/thread_spec.rb test/externals/rubinius/spec/core/true_spec.rb test/externals/rubinius/spec/language/assignment_spec.rb test/externals/rubinius/spec/language/class_spec.rb