summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gc.c8
-rw-r--r--gc/gc.h1
2 files changed, 9 insertions, 0 deletions
diff --git a/gc.c b/gc.c
index a1dc878dc6..8a18a12978 100644
--- a/gc.c
+++ b/gc.c
@@ -3174,6 +3174,14 @@ gc_mark_classext_iclass(rb_classext_t *ext, bool prime, VALUE box_value, void *a
#define TYPED_DATA_REFS_OFFSET_LIST(d) (size_t *)(uintptr_t)RTYPEDDATA_TYPE(d)->function.dmark
void
+rb_gc_move_obj_during_marking(VALUE from, VALUE to)
+{
+ if (rb_obj_gen_fields_p(to)) {
+ rb_mark_generic_ivar(from);
+ }
+}
+
+void
rb_gc_mark_children(void *objspace, VALUE obj)
{
struct gc_mark_classext_foreach_arg foreach_args;
diff --git a/gc/gc.h b/gc/gc.h
index 69dacf488f..a5edc266e7 100644
--- a/gc/gc.h
+++ b/gc/gc.h
@@ -107,6 +107,7 @@ MODULAR_GC_FN void *rb_gc_get_ractor_newobj_cache(void);
MODULAR_GC_FN void rb_gc_initialize_vm_context(struct rb_gc_vm_context *context);
MODULAR_GC_FN void rb_gc_worker_thread_set_vm_context(struct rb_gc_vm_context *context);
MODULAR_GC_FN void rb_gc_worker_thread_unset_vm_context(struct rb_gc_vm_context *context);
+MODULAR_GC_FN void rb_gc_move_obj_during_marking(VALUE from, VALUE to);
#endif
#if USE_MODULAR_GC