aboutsummaryrefslogtreecommitdiffstats
path: root/load.c
diff options
context:
space:
mode:
authorJeremy Evans <code@jeremyevans.net>2021-10-04 07:35:39 -0700
committerJeremy Evans <code@jeremyevans.net>2021-10-04 07:43:24 -0900
commitd9b7403746249b532ac57ca80112d7e63a417d86 (patch)
tree11df17e297f3c36a8d6f8ffbc51d484886f993ec /load.c
parentb44c5187b4d05d8644242e532f2243210d0b74df (diff)
downloadruby-d9b7403746249b532ac57ca80112d7e63a417d86.tar.gz
Use a rescue around the internal realpath call for each loaded feature
This appears to be only necessary on Solaris, but this commit enables it unconditionally to test breakage. The following commit will switch to only enabling it on Solaris.
Diffstat (limited to 'load.c')
-rw-r--r--load.c29
1 files changed, 28 insertions, 1 deletions
diff --git a/load.c b/load.c
index 3c0c723f72..38b26881ce 100644
--- a/load.c
+++ b/load.c
@@ -1060,6 +1060,33 @@ rb_ext_ractor_safe(bool flag)
GET_THREAD()->ext_config.ractor_safe = flag;
}
+#if 1
+static VALUE
+required_feature__realpath(VALUE path)
+{
+ return rb_realpath_internal(Qnil, path, 1);
+}
+
+static VALUE
+required_feature_realpath_rescue(VALUE path, VALUE exc)
+{
+ return path;
+}
+
+static VALUE
+required_feature_realpath(VALUE path)
+{
+ return rb_rescue(required_feature__realpath, path,
+ required_feature_realpath_rescue, path);
+}
+#else
+static VALUE
+required_feature_realpath(VALUE path)
+{
+ return rb_realpath_internal(Qnil, path, 1);
+}
+#endif
+
/*
* returns
* 0: if already loaded (false)
@@ -1111,7 +1138,7 @@ require_internal(rb_execution_context_t *ec, VALUE fname, int exception, bool wa
result = TAG_RETURN;
}
else if (RTEST(rb_hash_aref(realpaths,
- realpath = rb_realpath_internal(Qnil, path, 1)))) {
+ realpath = required_feature_realpath(path)))) {
result = 0;
}
else {