[ruby-core:75877] [Ruby trunk Bug#11953] ThreadError in 2.3 on code that works on 2.2.4
From:
the.codefolio.guy@...
Date:
2016-06-07 16:34:00 UTC
List:
ruby-core #75877
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 <marcandre@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
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: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>