ruby-core@ruby-lang.org archive (unofficial mirror)
 help / color / mirror / Atom feed
* [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).