From: the.codefolio.guy@... Date: 2016-06-07T16:34:00+00:00 Subject: [ruby-core:75877] [Ruby trunk Bug#11953] ThreadError in 2.3 on code that works on 2.2.4 Issue #11953 has been updated by Noah Gibbs. The error is occurring in Singleton's instance method, which is mutex-protected. Using the supplied example code, git-bisect points to this Ruby commit as the problem: commit d2487ed47587ec1cd1b456068e0af3ea0b39596d Author: marcandre Date: Fri May 22 13:36:39 2015 +0000 * lib/prime.rb: Remove obsolete Prime.new patch by Ajay Kumar. [Fixes GH-891] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50604 b2dd03c8-39d4-4d8f-98ff-823fe69b080e And that's where Prime switched from using a @the_instance member variable to using Singleton to track its instance. So it looks like this code never worked with Prime as a Singleton. ---------------------------------------- Bug #11953: ThreadError in 2.3 on code that works on 2.2.4 https://bugs.ruby-lang.org/issues/11953#change-59055 * 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: