summaryrefslogtreecommitdiff
path: root/signal.c
diff options
context:
space:
mode:
authorKoichi Sasada <ko1@atdot.net>2020-12-12 06:54:46 +0900
committerKoichi Sasada <ko1@atdot.net>2020-12-12 08:36:52 +0900
commit70a311fdeb66ce80b562ccc4459c409cea64b74c (patch)
tree759740cde8a1b1b86505b119af8b585325459974 /signal.c
parent124321e0c7ab8dac1ffce78c653cc677f878d5b0 (diff)
trap on non-main ractor
trap can accept blopck/Proc and it can violate Rator isolation, so the Proc should be isolatable when trap is used on non-main ractor.
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/3888
Diffstat (limited to 'signal.c')
-rw-r--r--signal.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/signal.c b/signal.c
index 08de1bccdb..91521fe807 100644
--- a/signal.c
+++ b/signal.c
@@ -43,6 +43,7 @@
#include "internal/thread.h"
#include "ruby_atomic.h"
#include "vm_core.h"
+#include "ractor_core.h"
#ifdef NEED_RUBY_ATOMIC_OPS
rb_atomic_t
@@ -1410,6 +1411,11 @@ sig_trap(int argc, VALUE *argv, VALUE _)
func = trap_handler(&cmd, sig);
}
+ if (rb_obj_is_proc(cmd) &&
+ !rb_ractor_main_p() && !rb_ractor_shareable_p(cmd)) {
+ cmd = rb_proc_isolate(cmd);
+ }
+
return trap(sig, func, cmd);
}