diff options
author | Koichi Sasada <[email protected]> | 2020-11-27 17:36:02 +0900 |
---|---|---|
committer | Koichi Sasada <[email protected]> | 2020-11-27 17:36:02 +0900 |
commit | 5496415d3165e57e3ade16238a4cc9ec2c3a81f6 (patch) | |
tree | 4dd8c176afc5b1e109281c4816c21880c4070275 | |
parent | 2db2fb9f6c742d5bd0019ccd11c7a375e1b12c0b (diff) |
mark default_rand
default_rand can points a Bignum seed, so it should be marked.
-rw-r--r-- | ractor.c | 10 | ||||
-rw-r--r-- | random.c | 7 |
2 files changed, 16 insertions, 1 deletions
@@ -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 { @@ -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) { |