[#108552] [Ruby master Bug#18782] Race conditions in autoload when loading the same feature with multiple threads. — "ioquatix (Samuel Williams)" <noreply@...>
Issue #18782 has been reported by ioquatix (Samuel Williams).
11 messages
2022/05/14
[ruby-core:108563] [Ruby master Bug#15790] Strange interaction between autoload and $LOADED_FEATURES
From:
"fxn (Xavier Noria)" <noreply@...>
Date:
2022-05-16 00:21:18 UTC
List:
ruby-core #108563
Issue #15790 has been updated by fxn (Xavier Noria).
> The behaviour described here does not seem strange to me
What do you mean Samuel?
You don't find strange that we pass from "now autoload on X" to "there's an autoload for X", without having set an autoload for X in between? (No threads involved.)
----------------------------------------
Bug #15790: Strange interaction between autoload and $LOADED_FEATURES
https://bugs.ruby-lang.org/issues/15790#change-97602
* Author: fxn (Xavier Noria)
* Status: Closed
* Priority: Normal
* ruby -v: ruby 2.6.1p33 (2019-01-30 revision 66950) [x86_64-darwin18]
* Backport: 2.4: UNKNOWN, 2.5: UNKNOWN, 2.6: UNKNOWN
----------------------------------------
If an autoload fails and we remove its associated file from `$LOADED_FEATURES`, the autoload is back:
```
$ cat x.rb
Y = 1 # should be X, emulates a typo
$ cat test.rb
def au
Object.autoload?(:X).inspect
end
x_rb = File.realpath("x.rb")
autoload :X, x_rb
puts "before failed autoload autoload path is #{au}"
X rescue nil
puts "after failed autoload autoload path is #{au}"
$LOADED_FEATURES.delete(x_rb)
puts "after $LOADED_FEATURES deletion autoload path is #{au}"
```
The output is
```
$ ruby -v test.rb
ruby 2.6.1p33 (2019-01-30 revision 66950) [x86_64-darwin18]
before failed autoload autoload path is "/Users/fxn/tmp/x.rb"
after failed autoload autoload path is nil
after $LOADED_FEATURES deletion autoload path is "/Users/fxn/tmp/x.rb"
```
See? Last line would be expected to print a `nil` autoload path.
--
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>