diff --git a/ractor.c b/ractor.c index a5f22a4724..58f899e9ee 100644 --- a/ractor.c +++ b/ractor.c @@ -200,6 +200,11 @@ ractor_mark(void *ptr) rb_gc_mark(th->self); } } + + if (r->default_rand) { + void rb_default_rand_mark(void *); // random.c + rb_default_rand_mark(r->default_rand); + } } static void @@ -1773,7 +1778,10 @@ rb_ractor_default_rand(void *ptr) { if (rb_ractor_main_p()) { static void *default_rnd; - if (UNLIKELY(ptr != NULL)) default_rnd = ptr; + if (UNLIKELY(ptr != NULL)) { + rb_ractor_t *cr = GET_RACTOR(); + cr->default_rand = default_rnd = ptr; + } return default_rnd; } else { diff --git a/random.c b/random.c index 22c54492e6..76183f9c7a 100644 --- a/random.c +++ b/random.c @@ -158,6 +158,13 @@ default_rand(void) return rnd; } +void +rb_default_rand_mark(void *ptr) +{ + rb_random_mt_t *rnd = (rb_random_mt_t *)ptr; + rb_gc_mark(rnd->base.seed); +} + static rb_random_mt_t * default_mt(void) {