[ruby-core:75902] [Ruby trunk Bug#11953] ThreadError in 2.3 on code that works on 2.2.4
From:
ruby-core@...
Date:
2016-06-08 05:58:33 UTC
List:
ruby-core #75902
Issue #11953 has been updated by Marc-Andre Lafortune.
So, a minimal example is:
```
require 'prime'
class Prime
def new
end
end
Prime.prime?(42) # access any delegated method
```
It's easy to circumvent by calling `Prime.instance` before defining `new`, either directly or indirectly (via any delegated class method like `Prime.prime?`).
Maybe the `prime` library should instantiate the singleton on load? That would resolve the issue at hand.
I am a bit baffled by what is the intent behind defining an instance method called `new` though...
----------------------------------------
Bug #11953: ThreadError in 2.3 on code that works on 2.2.4
https://bugs.ruby-lang.org/issues/11953#change-59083
* 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: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>