* [ruby-core:86935] [Ruby trunk Bug#14742] Deadlock when autoloading different constants in the same file from multiple threads
[not found] <redmine.issue-14742.20180508021631@ruby-lang.org>
@ 2018-05-08 2:16 ` elkenny
2018-05-08 3:06 ` [ruby-core:86937] " Eric Wong
` (2 more replies)
2018-05-25 16:09 ` [ruby-core:87259] " elkenny
1 sibling, 3 replies; 6+ messages in thread
From: elkenny @ 2018-05-08 2:16 UTC (permalink / raw
To: ruby-core
Issue #14742 has been reported by eugeneius (Eugene Kenny).
----------------------------------------
Bug #14742: Deadlock when autoloading different constants in the same file from multiple threads
https://bugs.ruby-lang.org/issues/14742
* Author: eugeneius (Eugene Kenny)
* Status: Open
* Priority: Normal
* Assignee:
* Target version:
* ruby -v: ruby 2.6.0dev (2018-05-08 trunk 63355) [x86_64-darwin17]
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN
----------------------------------------
The following example deadlocks consistently:
~~~ ruby
# 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>'
~~~
--
https://bugs.ruby-lang.org/
^ permalink raw reply [flat|nested] 6+ messages in thread
* [ruby-core:86937] Re: [Ruby trunk Bug#14742] Deadlock when autoloading different constants in the same file from multiple threads
2018-05-08 2:16 ` [ruby-core:86935] [Ruby trunk Bug#14742] Deadlock when autoloading different constants in the same file from multiple threads elkenny
@ 2018-05-08 3:06 ` Eric Wong
2018-05-08 3:34 ` [ruby-core:86939] " Eric Wong
2018-05-10 1:29 ` [ruby-core:86959] " Eric Wong
2 siblings, 0 replies; 6+ messages in thread
From: Eric Wong @ 2018-05-08 3:06 UTC (permalink / raw
To: ruby-core
Investigating
^ permalink raw reply [flat|nested] 6+ messages in thread
* [ruby-core:86939] Re: [Ruby trunk Bug#14742] Deadlock when autoloading different constants in the same file from multiple threads
2018-05-08 2:16 ` [ruby-core:86935] [Ruby trunk Bug#14742] Deadlock when autoloading different constants in the same file from multiple threads elkenny
2018-05-08 3:06 ` [ruby-core:86937] " Eric Wong
@ 2018-05-08 3:34 ` Eric Wong
2018-05-10 1:29 ` [ruby-core:86959] " Eric Wong
2 siblings, 0 replies; 6+ messages in thread
From: Eric Wong @ 2018-05-08 3:34 UTC (permalink / raw
To: ruby-core
Yes, this is an old bug and not caused by my changes, I guess.
It requires reworking some internal data structures in
variable.c to provide feature mapping to autoload_data_i
so different autoloads referring to the same file (aka "feature")
can safely wait on each other.
Will work on this tomorrow, I need sleep :<
^ permalink raw reply [flat|nested] 6+ messages in thread
* [ruby-core:86959] Re: [Ruby trunk Bug#14742] Deadlock when autoloading different constants in the same file from multiple threads
2018-05-08 2:16 ` [ruby-core:86935] [Ruby trunk Bug#14742] Deadlock when autoloading different constants in the same file from multiple threads elkenny
2018-05-08 3:06 ` [ruby-core:86937] " Eric Wong
2018-05-08 3:34 ` [ruby-core:86939] " Eric Wong
@ 2018-05-10 1:29 ` Eric Wong
2018-05-10 5:11 ` [ruby-core:86963] " Eric Wong
2 siblings, 1 reply; 6+ messages in thread
From: Eric Wong @ 2018-05-10 1:29 UTC (permalink / raw
To: ruby-core
Sorry for the delay, r63387 should fix it.
^ permalink raw reply [flat|nested] 6+ messages in thread
* [ruby-core:86963] Re: [Ruby trunk Bug#14742] Deadlock when autoloading different constants in the same file from multiple threads
2018-05-10 1:29 ` [ruby-core:86959] " Eric Wong
@ 2018-05-10 5:11 ` Eric Wong
0 siblings, 0 replies; 6+ messages in thread
From: Eric Wong @ 2018-05-10 5:11 UTC (permalink / raw
To: ruby-core
Eric Wong <normalperson@yhbt.net> wrote:
> Sorry for the delay, r63387 should fix it.
Reverted for now. Some problems need fixing but I can't reproduce
on my 32-bit system (and my 64-bit machines have problems).
^ permalink raw reply [flat|nested] 6+ messages in thread
* [ruby-core:87259] [Ruby trunk Bug#14742] Deadlock when autoloading different constants in the same file from multiple threads
[not found] <redmine.issue-14742.20180508021631@ruby-lang.org>
2018-05-08 2:16 ` [ruby-core:86935] [Ruby trunk Bug#14742] Deadlock when autoloading different constants in the same file from multiple threads elkenny
@ 2018-05-25 16:09 ` elkenny
1 sibling, 0 replies; 6+ messages in thread
From: elkenny @ 2018-05-25 16:09 UTC (permalink / raw
To: ruby-core
Issue #14742 has been updated by eugeneius (Eugene Kenny).
It looks like the fix was un-reverted in r63392. Thank you for working on this, Eric!
----------------------------------------
Bug #14742: Deadlock when autoloading different constants in the same file from multiple threads
https://bugs.ruby-lang.org/issues/14742#change-72249
* Author: eugeneius (Eugene Kenny)
* Status: Closed
* Priority: Normal
* Assignee:
* Target version:
* ruby -v: ruby 2.6.0dev (2018-05-08 trunk 63355) [x86_64-darwin17]
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN
----------------------------------------
The following example deadlocks consistently:
~~~ ruby
# 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>'
~~~
--
https://bugs.ruby-lang.org/
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2018-05-25 16:09 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <redmine.issue-14742.20180508021631@ruby-lang.org>
2018-05-08 2:16 ` [ruby-core:86935] [Ruby trunk Bug#14742] Deadlock when autoloading different constants in the same file from multiple threads elkenny
2018-05-08 3:06 ` [ruby-core:86937] " Eric Wong
2018-05-08 3:34 ` [ruby-core:86939] " Eric Wong
2018-05-10 1:29 ` [ruby-core:86959] " Eric Wong
2018-05-10 5:11 ` [ruby-core:86963] " Eric Wong
2018-05-25 16:09 ` [ruby-core:87259] " elkenny
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).