aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ractor.c10
-rw-r--r--random.c7
2 files changed, 16 insertions, 1 deletions
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)
{