From 96739c422206d55acab4aee917d9d965c27b6fff Mon Sep 17 00:00:00 2001 From: Koichi Sasada Date: Fri, 25 Sep 2020 14:06:32 +0900 Subject: Frozen Struct can be shareable. A frozen Struct object which refers to shareable objects should be shareable. --- ractor.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'ractor.c') diff --git a/ractor.c b/ractor.c index 382d3d5199..6ef294d135 100644 --- a/ractor.c +++ b/ractor.c @@ -7,6 +7,7 @@ #include "vm_sync.h" #include "ractor.h" #include "internal/error.h" +#include "internal/struct.h" static VALUE rb_cRactor; static VALUE rb_eRactorError; @@ -1784,6 +1785,22 @@ rb_ractor_shareable_p_hash_i(VALUE key, VALUE value, VALUE arg) return ST_CONTINUE; } +static bool +ractor_struct_shareable_members_p(VALUE obj) +{ + VM_ASSERT(RB_TYPE_P(obj, T_STRUCT)); + + long len = RSTRUCT_LEN(obj); + const VALUE *ptr = RSTRUCT_CONST_PTR(obj); + + for (long i=0; i