From 2235fdb6f11a4d076bde32c9da43ee79d8943503 Mon Sep 17 00:00:00 2001 From: Peter Zhu Date: Thu, 24 Jul 2025 16:41:23 -0400 Subject: [PATCH 1/3] Remove VM lock for rb_id_attrset --- symbol.c | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/symbol.c b/symbol.c index 9c5f9a11718d47..ef1eb0f7acecfe 100644 --- a/symbol.c +++ b/symbol.c @@ -452,22 +452,20 @@ rb_id_attrset(ID id) } bool error = false; - GLOBAL_SYMBOLS_LOCKING(symbols) { - /* make new symbol and ID */ - VALUE str = lookup_id_str(id); - if (str) { - str = rb_str_dup(str); - rb_str_cat(str, "=", 1); - if (sym_check_asciionly(str, false)) { - rb_enc_associate(str, rb_usascii_encoding()); - } - - VALUE sym = sym_find_or_insert_static_symbol(symbols, str); - id = rb_sym2id(sym); - } - else { - error = true; + /* make new symbol and ID */ + VALUE str = lookup_id_str(id); + if (str) { + str = rb_str_dup(str); + rb_str_cat(str, "=", 1); + if (sym_check_asciionly(str, false)) { + rb_enc_associate(str, rb_usascii_encoding()); } + + VALUE sym = sym_find_or_insert_static_symbol(&ruby_global_symbols, str); + id = rb_sym2id(sym); + } + else { + error = true; } if (error) { From 42f95456cc51f3b59605c66a65cff19dfe1b3e59 Mon Sep 17 00:00:00 2001 From: Peter Zhu Date: Thu, 24 Jul 2025 16:42:17 -0400 Subject: [PATCH 2/3] Remove VM lock for sym_find --- symbol.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/symbol.c b/symbol.c index ef1eb0f7acecfe..317254b3e3c809 100644 --- a/symbol.c +++ b/symbol.c @@ -827,12 +827,10 @@ sym_find(VALUE str) { VALUE sym; - GLOBAL_SYMBOLS_LOCKING(symbols) { - struct sym_set_static_sym_entry static_sym = { - .str = str - }; - sym = rb_concurrent_set_find(&symbols->sym_set, sym_set_static_sym_tag(&static_sym)); - } + struct sym_set_static_sym_entry static_sym = { + .str = str + }; + sym = rb_concurrent_set_find(&ruby_global_symbols.sym_set, sym_set_static_sym_tag(&static_sym)); if (sym) { return sym_set_entry_to_sym(sym); From bd2d6845f1c48a572e202409367a4e756c4bb3c5 Mon Sep 17 00:00:00 2001 From: Peter Zhu Date: Thu, 24 Jul 2025 16:50:38 -0400 Subject: [PATCH 3/3] Remove VM lock in register_static_symid --- symbol.c | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/symbol.c b/symbol.c index 317254b3e3c809..e0c50b00fc9dc9 100644 --- a/symbol.c +++ b/symbol.c @@ -51,7 +51,6 @@ #define STATIC_SYM2ID(sym) RSHIFT((VALUE)(sym), RUBY_SPECIAL_SHIFT) static ID register_static_symid(ID, const char *, long, rb_encoding *); -static ID register_static_symid_str(ID, VALUE); #define REGISTER_SYMID(id, name) register_static_symid((id), (name), strlen(name), enc) #include "id.c" @@ -803,21 +802,12 @@ static ID register_static_symid(ID id, const char *name, long len, rb_encoding *enc) { VALUE str = rb_enc_str_new(name, len, enc); - return register_static_symid_str(id, str); -} - -static ID -register_static_symid_str(ID id, VALUE str) -{ OBJ_FREEZE(str); str = rb_fstring(str); RUBY_DTRACE_CREATE_HOOK(SYMBOL, RSTRING_PTR(str)); - GLOBAL_SYMBOLS_LOCKING(symbols) { - // TODO: remove this function - sym_find_or_insert_static_symbol_id(symbols, str, id); - } + sym_find_or_insert_static_symbol_id(&ruby_global_symbols, str, id); return id; }