jruby --1.9 : Exception in thread "RubyThread-1: threadtest.rb:1"

Discussion in 'Ruby' started by Markus Fischer, May 25, 2011.

  1. Hi,

    the following script works under MRI 1.9, but not under jruby 1.9 (but
    in jruby 1.8):

    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 }


    Here's the stacktrace I'm getting. Only the first thread runs:

    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)

    If I remove the @mutex check in true?, it works in jruby 1.9.

    thanks,
    - Markus
     
    Markus Fischer, May 25, 2011
    #1
    1. Advertisements

  2. That's wacked. Please file a bug at http://bugs.jruby.org. Looks like
    a class name we're generating internally is not getting handled
    properly.

     
    Charles Oliver Nutter, Jun 3, 2011
    #2
    1. Advertisements

  3. Markus Fischer, Jun 5, 2011
    #3
  4. Charles Oliver Nutter, Jun 8, 2011
    #4
  5. :)

    I'm happy this is solved! You don't happen to have a time frame for
    1.6.3 release? ;)

    thanks,
    - Markus
     
    Markus Fischer, Jun 8, 2011
    #5
  6. Soonish? :)

    - Charlie
     
    Charles Oliver Nutter, Jun 10, 2011
    #6
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.