From 3fb455adabc26a978f3bf42aa0bf42f10f64ae31 Mon Sep 17 00:00:00 2001 From: Peter Zhu Date: Fri, 7 Feb 2025 11:10:18 -0500 Subject: [PATCH] Move global symbol reference updating to rb_sym_global_symbols_update_references --- gc.c | 3 +-- internal/symbol.h | 1 + symbol.c | 9 +++++++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/gc.c b/gc.c index 47c525416b..05da30a0a0 100644 --- a/gc.c +++ b/gc.c @@ -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); diff --git a/symbol.c b/symbol.c index 43be046856..5f95769292 100644 --- a/symbol.c +++ b/symbol.c @@ -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));