From: the.codefolio.guy@... Date: 2016-06-08T20:59:59+00:00 Subject: [ruby-core:75903] [Ruby trunk Bug#11953] ThreadError in 2.3 on code that works on 2.2.4 Issue #11953 has been updated by Noah Gibbs. Marc-Andre: this is happening in code that doesn't define new *or* call instance() directly -- the supplied sample code doesn't do either of those. Instead, methods called on Prime are forwarded to its instance. If the instance doesn't exist, they try to create it using new. Prime.new doesn't work -- it calls .instance() again, recursing and trying to grab the mutex again. Just calling Prime.instance() first wouldn't help. You'd have to set the instance variable of Prime (the one Singleton uses) manually in some way to avoid calling Prime.new, which does the wrong thing. Part of the problem is that Prime.new is an old deprecated interface that users used to use and now shouldn't. The test code is just calling Prime.nth() and failing. ---------------------------------------- Bug #11953: ThreadError in 2.3 on code that works on 2.2.4 https://bugs.ruby-lang.org/issues/11953#change-59090 * Author: Clayton Flesher * Status: Open * Priority: Normal * Assignee: * ruby -v: 2.3.0 * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN ---------------------------------------- This is my first bug reporting, so I'm sorry if this isn't exactly correct format. I'll update my report accordingly if pointed in the right direction. I ran into what appears to be a bug while doing a quiz. I've included the breaking code, the test suite and the description of the quiz as attachments to this bug report. The following code works fine on Ruby 2.2.4. ```ruby class Prime def self.nth(num) error(num) primes = build_primes(num) primes.last end private def build_primes(num) primes = [2] index = 3 until primes.size == num if example?(index, primes) primes << index end index += 1 end primes end def error(num) unless num > 0 raise ArgumentError end end def example?(index, primes) primes.each do |prime| if index % prime == 0 return false end end true end end ``` It raises this error in Ruby 2.3.0 ``` ThreadError: deadlock; recursive locking /home/clayton/.rubies/ruby-2.3.0/lib/ruby/2.3.0/singleton.rb:140:in `synchronize' /home/clayton/.rubies/ruby-2.3.0/lib/ruby/2.3.0/singleton.rb:140:in `instance' /home/clayton/.rubies/ruby-2.3.0/lib/ruby/2.3.0/singleton.rb:142:in `block in instance' /home/clayton/.rubies/ruby-2.3.0/lib/ruby/2.3.0/singleton.rb:140:in `synchronize' /home/clayton/.rubies/ruby-2.3.0/lib/ruby/2.3.0/singleton.rb:140:in `instance' /home/clayton/exercism/ruby/nth-prime/nth_prime.rb:3:in `nth' nth_prime_test.rb:28:in `test_first' ``` If this is expected behavior, I'm sorry in advance for wasting your time. ---Files-------------------------------- nth_prime.rb (528 Bytes) nth_prime_test.rb (973 Bytes) README.md (1.27 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: