diff options
-rw-r--r-- | gc.c | 8 | ||||
-rw-r--r-- | internal/gc.h | 1 | ||||
-rw-r--r-- | vm.c | 2 |
3 files changed, 10 insertions, 1 deletions
@@ -6348,7 +6348,7 @@ rb_gc_mark_values(long n, const VALUE *values) rb_objspace_t *objspace = &rb_objspace; for (i=0; i<n; i++) { - gc_mark_and_pin(objspace, values[i]); + gc_mark(objspace, values[i]); } } @@ -10135,6 +10135,12 @@ gc_update_values(rb_objspace_t *objspace, long n, VALUE *values) } } +void +rb_gc_update_values(long n, VALUE *values) +{ + gc_update_values(&rb_objspace, n, values); +} + static bool moved_or_living_object_strictly_p(rb_objspace_t *objspace, VALUE obj) { diff --git a/internal/gc.h b/internal/gc.h index 7e0942a76a..be40a7a2f7 100644 --- a/internal/gc.h +++ b/internal/gc.h @@ -274,6 +274,7 @@ void rb_gc_verify_internal_consistency(void); size_t rb_obj_gc_flags(VALUE, ID[], size_t); void rb_gc_mark_values(long n, const VALUE *values); void rb_gc_mark_vm_stack_values(long n, const VALUE *values); +void rb_gc_update_values(long n, VALUE *values); void *ruby_sized_xrealloc(void *ptr, size_t new_size, size_t old_size) RUBY_ATTR_RETURNS_NONNULL RUBY_ATTR_ALLOC_SIZE((2)); void *ruby_sized_xrealloc2(void *ptr, size_t new_count, size_t element_size, size_t old_count) RUBY_ATTR_RETURNS_NONNULL RUBY_ATTR_ALLOC_SIZE((2, 3)); void ruby_sized_xfree(void *x, size_t size); @@ -2743,6 +2743,8 @@ rb_vm_update_references(void *ptr) rb_gc_update_tbl_refs(vm->overloaded_cme_table); + rb_gc_update_values(RUBY_NSIG, vm->trap_list.cmd); + if (vm->coverages) { vm->coverages = rb_gc_location(vm->coverages); vm->me2counter = rb_gc_location(vm->me2counter); |