From: ruby-core@... Date: 2016-06-08T23:18:28+00:00 Subject: [ruby-core:75904] [Ruby trunk Bug#11953] ThreadError in 2.3 on code that works on 2.2.4 Issue #11953 has been updated by Marc-Andre Lafortune. Assignee set to Marc-Andre Lafortune Hi. > this is happening in code that doesn't define new I'm sorry if I'm missing something, but could you please provide such code? Lines 12-15 of `nth_prime_test.rb` defines an instance method called `new`, and James also defines `new` in his code. > Just calling Prime.instance() first wouldn't help Did you actually try? Inserting `Prime.instance` in `nth_prime_test.rb` after the require doesn't produce the error > Part of the problem is that Prime.new is an old deprecated interface that users used to use and now shouldn't FWIW, Prime.new was deprecated in Ruby 1.9.0, more than 7 years ago. Are there examples of users still calling it? Ref: https://github.com/ruby/ruby/blob/fce093432eadc191b3647f116a9c2f6748efda3e/lib/prime.rb#L91 ---------------------------------------- Bug #11953: ThreadError in 2.3 on code that works on 2.2.4 https://bugs.ruby-lang.org/issues/11953#change-59091 * Author: Clayton Flesher * Status: Open * Priority: Normal * Assignee: Marc-Andre Lafortune * 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: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe> <http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>