Fix autoload status of statically linked extensions
Previously, for statically-linked extensions, we used vm->loading_table to delay calling the init function until the
extensions are required. This caused the extensions to look like they
are in the middle of being loaded even before they're required.
(rb_feature_p() returned true with a loading path output.) Combined
with autoload, queries like defined?(CONST) and Module#autoload?
were confused by this and returned nil incorrectly. RubyGems uses defined? to detect if OpenSSL is available and failed when OpenSSL was
available in builds using --with-static-linked-ext.
Use a dedicated table for the init functions instead of adding them to
the loading table. This lets us remove some logic from non-EXTSTATIC
builds.
Fix autoload status of statically linked extensions
Previously, for statically-linked extensions, we used
vm->loading_table
to delay calling the init function until theextensions are required. This caused the extensions to look like they
are in the middle of being loaded even before they're required.
(
rb_feature_p()
returned true with a loading path output.) Combinedwith autoload, queries like
defined?(CONST)
andModule#autoload?
were confused by this and returned nil incorrectly. RubyGems uses
defined?
to detect if OpenSSL is available and failed when OpenSSL wasavailable in builds using
--with-static-linked-ext
.Use a dedicated table for the init functions instead of adding them to
the loading table. This lets us remove some logic from non-EXTSTATIC
builds.
[Bug #19115]