jruby --1.9 : Exception in thread "RubyThread-1: threadtest.rb:1" java.lang.LinkageError: loader (instance of org/jruby/util/JRubyClassLoader): attempted duplicate class definition for name: "threadtest$block_0$RUBY$true?" ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Key: JRUBY-5850 URL: http://jira.codehaus.org/browse/JRUBY-5850 Project: JRuby Issue Type: Bug Affects Versions: JRuby 1.6.2 Environment: Linux Debian Squeeze @ 2.6.26-2-vserver-686 #1 SMP Thu Sep 16 23:09:48 UTC 2010 i686 GNU/Linux Reporter: Markus Fischer Assignee: Thomas E Enebo The following script works under MRI 1.9, but not under jruby 1.9 (but in jruby 1.8): {code:title=threadtest.rb} require 'thread' class MutexedBoolean def initialize(initial_value) @value = initial_value @mutex = Mutex.new end def true? @mutex.synchronize do @value == true end end end threads = [] run = MutexedBoolean.new(true) Thread.abort_on_exception = true threads << Thread.new do while run.true? puts "1" sleep 1 end end threads << Thread.new do while run.true? puts "2" sleep 1 end end threads.each { |t| t.join } {code} Here's the stacktrace I'm getting. Only the first thread runs: {code} Exception in thread "RubyThread-1: threadtest.rb:1" java.lang.LinkageError: loader (instance of org/jruby/util/JRubyClassLoader): attempted duplicate class definition for name: "threadtest$block_0$RUBY$true?" at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) at java.lang.ClassLoader.defineClass(ClassLoader.java:616) at org.jruby.util.JRubyClassLoader.defineClass(JRubyClassLoader.java:76) at org.jruby.internal.runtime.methods.InvocationMethodFactory.endClassWithBytes(InvocationMethodFactory.java:1358) at org.jruby.internal.runtime.methods.InvocationMethodFactory.getBlockCallback19(InvocationMethodFactory.java:899) at org.jruby.javasupport.util.RuntimeHelpers.createBlockCallback19(RuntimeHelpers.java:177) at org.jruby.javasupport.util.RuntimeHelpers.createCompiledBlockBody19(RuntimeHelpers.java:292) at org.jruby.javasupport.util.RuntimeHelpers.createCompiledBlockBody19(RuntimeHelpers.java:282) at org.jruby.ast.executable.RuntimeCache.createBlockBody19(RuntimeCache.java:442) at org.jruby.ast.executable.RuntimeCache.getBlockBody19(RuntimeCache.java:85) at org.jruby.ast.executable.AbstractScript.getBlockBody190(AbstractScript.java:106) at threadtest.method__2$RUBY$true_p_(threadtest.rb:9) at threadtest$method__2$RUBY$true_p_.call(threadtest$method__2$RUBY$true_p_:65535) at threadtest$method__2$RUBY$true_p_.call(threadtest$method__2$RUBY$true_p_:65535) at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:262) at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:105) at threadtest.block_2$RUBY$__file__(threadtest.rb:31) at threadtest$block_2$RUBY$__file__.call(threadtest$block_2$RUBY$__file__:65535) at org.jruby.runtime.CompiledBlock19.yield(CompiledBlock19.java:154) at org.jruby.runtime.CompiledBlock19.call(CompiledBlock19.java:82) at org.jruby.runtime.Block.call(Block.java:89) at org.jruby.RubyProc.call(RubyProc.java:268) at org.jruby.RubyProc.call(RubyProc.java:232) at org.jruby.internal.runtime.RubyRunnable.run(RubyRunnable.java:95) at java.lang.Thread.run(Thread.java:662) {code} If I remove the @mutex check in true?, it works in jruby 1.9. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://jira.codehaus.org/secure/Administrators.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