summaryrefslogtreecommitdiff
path: root/variable.c
diff options
context:
space:
mode:
authorKoichi Sasada <[email protected]>2024-11-05 04:54:06 +0900
committerKoichi Sasada <[email protected]>2024-11-08 18:02:46 +0900
commitaa63699d10e489bc6d9c13406fc47f581001568b (patch)
treec01cefb86da657d39e3a8f50771cb84827d5b003 /variable.c
parent075a102c937969c62a6798b32b3c3188df91a075 (diff)
support `require` in non-main Ractors
Many libraries should be loaded on the main ractor because of setting constants with unshareable objects and so on. This patch allows to call `requore` on non-main Ractors by asking the main ractor to call `require` on it. The calling ractor waits for the result of `require` from the main ractor. If the `require` call failed with some reasons, an exception objects will be deliverred from the main ractor to the calling ractor if it is copy-able. Same on `require_relative` and `require` by `autoload`. Now `Ractor.new{pp obj}` works well (the first call of `pp` requires `pp` library implicitly). [Feature #20627]
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/11142
Diffstat (limited to 'variable.c')
-rw-r--r--variable.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/variable.c b/variable.c
index bcdf2fb070..5e178ef06b 100644
--- a/variable.c
+++ b/variable.c
@@ -2994,7 +2994,7 @@ rb_autoload_load(VALUE module, ID name)
// At this point, we assume there might be autoloading, so fail if it's ractor:
if (UNLIKELY(!rb_ractor_main_p())) {
- rb_raise(rb_eRactorUnsafeError, "require by autoload on non-main Ractor is not supported (%s)", rb_id2name(name));
+ return rb_ractor_autoload_load(module, name);
}
// This state is stored on the stack and is used during the autoload process.