diff options
author | Koichi Sasada <[email protected]> | 2020-09-11 18:31:15 +0900 |
---|---|---|
committer | Koichi Sasada <[email protected]> | 2020-09-15 00:04:59 +0900 |
commit | e81d7189a09155344b3135903300dce450232402 (patch) | |
tree | 48922bdeb367549d811e48d32e84048aef6e66d8 /string.c | |
parent | 74ddac1c822697b442646f433d60e2c099db3c3b (diff) |
sync fstring pool
fstring pool should be sync with other Ractors.
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/3534
Diffstat (limited to 'string.c')
-rw-r--r-- | string.c | 18 |
1 files changed, 12 insertions, 6 deletions
@@ -53,6 +53,7 @@ #include "ruby/re.h" #include "ruby/util.h" #include "ruby_assert.h" +#include "vm_sync.h" #define BEG(no) (regs->beg[(no)]) #define END(no) (regs->end[(no)]) @@ -364,13 +365,18 @@ static VALUE register_fstring(VALUE str) { VALUE ret; - st_table *frozen_strings = rb_vm_fstring_table(); - do { - ret = str; - st_update(frozen_strings, (st_data_t)str, - fstr_update_callback, (st_data_t)&ret); - } while (ret == Qundef); + RB_VM_LOCK_ENTER(); + { + st_table *frozen_strings = rb_vm_fstring_table(); + + do { + ret = str; + st_update(frozen_strings, (st_data_t)str, + fstr_update_callback, (st_data_t)&ret); + } while (ret == Qundef); + } + RB_VM_LOCK_LEAVE(); assert(OBJ_FROZEN(ret)); assert(!FL_TEST_RAW(ret, STR_FAKESTR)); |