summaryrefslogtreecommitdiff
path: root/load.c
diff options
context:
space:
mode:
authorJeremy Evans <code@jeremyevans.net>2021-07-27 13:55:21 -0700
committerNobuyoshi Nakada <nobu@ruby-lang.org>2021-07-28 12:29:45 +0900
commit345db8f2aa373a31c619c8f85bd372f0a20829c1 (patch)
tree84d18ab963611db80bf578053f699e07341abf0b /load.c
parent30d0e5d1ae4ee4a3c145ca4bdacaad5b09c49bb7 (diff)
downloadruby-345db8f2aa373a31c619c8f85bd372f0a20829c1.tar.gz
Avoid pointless attempts to open .so file if already required
When attempting to require a file without an extension that has already been required or provided with an .so extension, only look for files with an .rb extension. There is no point in trying to find files with an .so extension, since we already know one has been loaded. Previously, attempting to require such a file scanned the load path twice, once for .rb and once for .so. Now it only scans once for .rb. The scan once for .rb cannot be avoided, since the .rb file would take precedence and should be loaded if it exists. Fixes [Bug #10902]
Diffstat (limited to 'load.c')
-rw-r--r--load.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/load.c b/load.c
index 74c94f9999..9f0dde2860 100644
--- a/load.c
+++ b/load.c
@@ -35,6 +35,11 @@ static const char *const loadable_ext[] = {
0
};
+static const char *const ruby_ext[] = {
+ ".rb",
+ 0
+};
+
enum expand_type {
EXPAND_ALL,
EXPAND_RELATIVE,
@@ -963,7 +968,7 @@ search_required(VALUE fname, volatile VALUE *path, feature_func rb_feature_p)
return 'r';
}
tmp = fname;
- type = rb_find_file_ext(&tmp, loadable_ext);
+ type = rb_find_file_ext(&tmp, ft == 's' ? ruby_ext : loadable_ext);
switch (type) {
case 0:
if (ft)