summaryrefslogtreecommitdiff
path: root/gc.c
diff options
context:
space:
mode:
authorMatt Valentine-House <matt@eightbitraptor.com>2021-01-14 21:33:02 +0000
committerAaron Patterson <aaron.patterson@gmail.com>2021-01-26 08:17:58 -0800
commit479e4d13cbf0bf2c7d3789787a8c055468141e4f (patch)
treece48bec58b2b05749e96980d1dec85a01e840753 /gc.c
parented6dc066b6247465c2bc55a39c2a837e53d2d4d0 (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 <peter@peterzhu.ca>
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/4074
Diffstat (limited to 'gc.c')
-rw-r--r--gc.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/gc.c b/gc.c
index c6bc641a01..9bee2467b6 100644
--- a/gc.c
+++ b/gc.c
@@ -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();