diff options
author | Matt Valentine-House <[email protected]> | 2021-01-14 21:33:02 +0000 |
---|---|---|
committer | Aaron Patterson <[email protected]> | 2021-01-26 08:17:58 -0800 |
commit | 479e4d13cbf0bf2c7d3789787a8c055468141e4f (patch) | |
tree | ce48bec58b2b05749e96980d1dec85a01e840753 /gc.c | |
parent | ed6dc066b6247465c2bc55a39c2a837e53d2d4d0 (diff) |
Fix RGENGC CHECK MODE >= 4
[A previous commit](b59077eecf912a16efefc0256f6e94a000ce3888) removes some macro definitions that are used when RGENGC_CHECK_MODE >=4 because they were using data stored against objspace, which is not ractor safe
This commit reinstates those macro definitions, using the current ractor
Co-authored-by: peterzhu2118 <[email protected]>
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/4074
Diffstat (limited to 'gc.c')
-rw-r--r-- | gc.c | 9 |
1 files changed, 7 insertions, 2 deletions
@@ -6729,12 +6729,17 @@ allrefs_roots_i(VALUE obj, void *ptr) push_mark_stack(&data->mark_stack, obj); } } +#define PUSH_MARK_FUNC_DATA(v) do { \ + struct gc_mark_func_data_struct *prev_mark_func_data = GET_RACTOR()->mfd; \ + GET_RACTOR()->mfd = (v); + +#define POP_MARK_FUNC_DATA() GET_RACTOR()->mfd = prev_mark_func_data;} while (0) static st_table * objspace_allrefs(rb_objspace_t *objspace) { struct allrefs data; - struct mark_func_data_struct mfd; + struct gc_mark_func_data_struct mfd; VALUE obj; int prev_dont_gc = dont_gc_val(); dont_gc_on(); @@ -6748,7 +6753,7 @@ objspace_allrefs(rb_objspace_t *objspace) /* traverse root objects */ PUSH_MARK_FUNC_DATA(&mfd); - objspace->mark_func_data = &mfd; + GET_RACTOR()->mfd = &mfd; gc_mark_roots(objspace, &data.category); POP_MARK_FUNC_DATA(); |