diff options
author | Lars Kanis <lars@greiz-reinsdorf.de> | 2023-05-08 13:21:33 +0200 |
---|---|---|
committer | Lars Kanis <lars@greiz-reinsdorf.de> | 2023-05-08 13:21:33 +0200 |
commit | c6b7139d0394638ef51b451b81dcd2ffefb94160 (patch) | |
tree | f1513b0afc5ef798382100a53c3191ff52e66d3e /ext/ffi_c/DynamicLibrary.c | |
parent | c1e6a14476e210efeac79aa260c2eb2d1d98a580 (diff) | |
parent | 938b5d8590361acf871fddb9149fe725f65d781f (diff) | |
download | ffi-c6b7139d0394638ef51b451b81dcd2ffefb94160.tar.gz |
Merge branch 'ractor'
Diffstat (limited to 'ext/ffi_c/DynamicLibrary.c')
-rw-r--r-- | ext/ffi_c/DynamicLibrary.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/ext/ffi_c/DynamicLibrary.c b/ext/ffi_c/DynamicLibrary.c index bcbc8de..9096e74 100644 --- a/ext/ffi_c/DynamicLibrary.c +++ b/ext/ffi_c/DynamicLibrary.c @@ -73,7 +73,7 @@ static const rb_data_type_t rbffi_library_data_type = { }, // IMPORTANT: WB_PROTECTED objects must only use the RB_OBJ_WRITE() // macro to update VALUE references, as to trigger write barriers. - .flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED + .flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | FFI_RUBY_TYPED_FROZEN_SHAREABLE }; static const rb_data_type_t library_symbol_data_type = { @@ -87,7 +87,7 @@ static const rb_data_type_t library_symbol_data_type = { .parent = &rbffi_pointer_data_type, // IMPORTANT: WB_PROTECTED objects must only use the RB_OBJ_WRITE() // macro to update VALUE references, as to trigger write barriers. - .flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED + .flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | FFI_RUBY_TYPED_FROZEN_SHAREABLE }; static VALUE LibraryClass = Qnil, SymbolClass = Qnil; @@ -161,7 +161,9 @@ library_initialize(VALUE self, VALUE libname, VALUE libflags) library->handle = RTLD_DEFAULT; } #endif - rb_iv_set(self, "@name", libname != Qnil ? libname : rb_str_new2("[current process]")); + rb_iv_set(self, "@name", libname != Qnil ? rb_str_new_frozen(libname) : rb_str_new2("[current process]")); + + rb_obj_freeze(self); return self; } @@ -277,8 +279,9 @@ symbol_new(VALUE library, void* address, VALUE name) sym->base.memory.typeSize = 1; sym->base.memory.flags = MEM_RD | MEM_WR; RB_OBJ_WRITE(obj, &sym->base.rbParent, library); - RB_OBJ_WRITE(obj, &sym->name, name); + RB_OBJ_WRITE(obj, &sym->name, rb_str_new_frozen(name)); + rb_obj_freeze(obj); return obj; } |