[ruby-core:75904] [Ruby trunk Bug#11953] ThreadError in 2.3 on code that works on 2.2.4
From:
ruby-core@...
Date:
2016-06-08 23:18:28 UTC
List:
ruby-core #75904
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>