Actions
Bug #14742
closedDeadlock when autoloading different constants in the same file from multiple threads
Bug #14742:
Deadlock when autoloading different constants in the same file from multiple threads
Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 2.6.0dev (2018-05-08 trunk 63355) [x86_64-darwin17]
Description
The following example deadlocks consistently:
# a.rb
autoload :Foo, __dir__ + "/b"
autoload :Bar, __dir__ + "/b"
t1 = Thread.new { Foo }
t2 = Thread.new { Bar }
t1.join
t2.join
# b.rb
module Foo; end
module Bar; end
$ ruby a.rb
Traceback (most recent call last):
1: from a.rb:7:in `<main>'
a.rb:7:in `join': No live threads left. Deadlock? (fatal)
3 threads, 3 sleeps current:0x00007ffa817ae680 main thread:0x00007ffa8140bf30
* #<Thread:0x00007ffa818797f8 sleep_forever>
rb_thread_t:0x00007ffa8140bf30 native:0x00007fff9b3fa380 int:1
a.rb:7:in `join'
a.rb:7:in `<main>'
* #<Thread:0x00007ffa830379a8@a.rb:4 sleep_forever>
rb_thread_t:0x00007ffa817ace60 native:0x0000700007e7b000 int:0 mutex:0x00007ffa817ae680 cond:1
depended by: tb_thread_id:0x00007ffa8140bf30
/Users/eugene/.rbenv/versions/2.6.0-dev/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:59:in `require'
/Users/eugene/.rbenv/versions/2.6.0-dev/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:59:in `require'
a.rb:4:in `block in <main>'
* #<Thread:0x00007ffa830372c8@a.rb:5 sleep_forever>
rb_thread_t:0x00007ffa817ae680 native:0x0000700007f7e000 int:0
/Users/eugene/src/autoload_thread_safety_test/b.rb:1:in `<top (required)>'
/Users/eugene/.rbenv/versions/2.6.0-dev/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:59:in `require'
/Users/eugene/.rbenv/versions/2.6.0-dev/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:59:in `require'
a.rb:5:in `block in <main>'
Actions
Like0
Like0Like0Like0Like0Like0Like0