diff options
-rw-r--r-- | gc.c | 3 | ||||
-rw-r--r-- | internal/symbol.h | 1 | ||||
-rw-r--r-- | symbol.c | 9 |
3 files changed, 11 insertions, 2 deletions
@@ -3618,8 +3618,7 @@ rb_gc_update_vm_references(void *objspace) rb_vm_update_references(vm); rb_gc_update_global_tbl(); - global_symbols.ids = gc_location_internal(objspace, global_symbols.ids); - global_symbols.dsymbol_fstr_hash = gc_location_internal(objspace, global_symbols.dsymbol_fstr_hash); + rb_sym_global_symbols_update_references(); #if USE_YJIT void rb_yjit_root_update_references(void); // in Rust diff --git a/internal/symbol.h b/internal/symbol.h index 87128658ab..1a066af0e7 100644 --- a/internal/symbol.h +++ b/internal/symbol.h @@ -18,6 +18,7 @@ /* symbol.c */ void rb_sym_global_symbols_mark(void); +void rb_sym_global_symbols_update_references(void); VALUE rb_to_symbol_type(VALUE obj); VALUE rb_sym_intern(const char *ptr, long len, rb_encoding *enc); VALUE rb_sym_intern_ascii(const char *ptr, long len); @@ -113,6 +113,15 @@ rb_sym_global_symbols_mark(void) rb_gc_mark_movable(symbols->dsymbol_fstr_hash); } +void +rb_sym_global_symbols_update_references(void) +{ + rb_symbols_t *symbols = &ruby_global_symbols; + + symbols->ids = rb_gc_location(symbols->ids); + symbols->dsymbol_fstr_hash = rb_gc_location(symbols->dsymbol_fstr_hash); +} + WARN_UNUSED_RESULT(static VALUE dsymbol_alloc(rb_symbols_t *symbols, const VALUE klass, const VALUE str, rb_encoding *const enc, const ID type)); WARN_UNUSED_RESULT(static VALUE dsymbol_check(rb_symbols_t *symbols, const VALUE sym)); WARN_UNUSED_RESULT(static ID lookup_str_id(VALUE str)); |