From 5ad7a2b9c825bceb0c4b2adadedc64b0e828b75e Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Sat, 4 May 2024 23:20:53 +0900 Subject: [PATCH 1/7] Ractor support --- ext/fiddle/closure.c | 3 ++- ext/fiddle/extconf.rb | 2 ++ ext/fiddle/fiddle.h | 10 ++++++++++ ext/fiddle/function.c | 5 ++++- ext/fiddle/handle.c | 3 ++- ext/fiddle/memory_view.c | 9 +++++++-- ext/fiddle/pinned.c | 10 +++++++--- ext/fiddle/pointer.c | 2 +- test/fiddle/test_closure.rb | 9 +++++++++ test/fiddle/test_function.rb | 8 ++++++++ test/fiddle/test_handle.rb | 8 ++++++++ test/fiddle/test_memory_view.rb | 9 +++++++++ test/fiddle/test_pinned.rb | 10 +++++++++- test/fiddle/test_pointer.rb | 8 ++++++++ 14 files changed, 86 insertions(+), 10 deletions(-) diff --git a/ext/fiddle/closure.c b/ext/fiddle/closure.c index 7aa94076..cdb3853e 100644 --- a/ext/fiddle/closure.c +++ b/ext/fiddle/closure.c @@ -61,7 +61,7 @@ const rb_data_type_t closure_data_type = { .dfree = dealloc, .dsize = closure_memsize }, - .flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED, + .flags = FIDDLE_DEFAULT_TYPED_DATA_FALGS, }; struct callback_args { @@ -300,6 +300,7 @@ initialize_body(VALUE user_data) cl->argv[i] = rb_fiddle_int_to_ffi_type(NUM2INT(arg)); } cl->argv[argc] = NULL; + OBJ_FREEZE_RAW(normalized_args); ret = rb_fiddle_type_ensure(ret); rb_iv_set(data->self, "@ctype", ret); diff --git a/ext/fiddle/extconf.rb b/ext/fiddle/extconf.rb index a4a7e7e1..28999806 100644 --- a/ext/fiddle/extconf.rb +++ b/ext/fiddle/extconf.rb @@ -223,6 +223,8 @@ def enable_debug_build_flag(flags) $LOCAL_LIBS.prepend("#{libffi.a} ").strip! # to exts.mk $INCFLAGS.gsub!(/-I#{libffi.dir}/, '-I$(LIBFFI_DIR)') end + +have_func("rb_str_to_interned_str") create_makefile 'fiddle' do |conf| if !libffi next conf << "LIBFFI_CLEAN = none\n" diff --git a/ext/fiddle/fiddle.h b/ext/fiddle/fiddle.h index 54391b95..edd96bb0 100644 --- a/ext/fiddle/fiddle.h +++ b/ext/fiddle/fiddle.h @@ -236,4 +236,14 @@ VALUE rb_fiddle_new_function(VALUE address, VALUE arg_types, VALUE ret_type); typedef void (*rb_fiddle_freefunc_t)(void*); VALUE rb_fiddle_ptr_new_wrap(void *ptr, long size, rb_fiddle_freefunc_t func, VALUE wrap0, VALUE wrap1); +enum { + FIDDLE_DEFAULT_TYPED_DATA_FALGS = ( + RUBY_TYPED_FREE_IMMEDIATELY | + RUBY_TYPED_WB_PROTECTED | +#ifdef RUBY_TYPED_FROZEN_SHAREABLE + RUBY_TYPED_FROZEN_SHAREABLE | +#endif + 0) +}; + #endif diff --git a/ext/fiddle/function.c b/ext/fiddle/function.c index 73dfb129..0184cd20 100644 --- a/ext/fiddle/function.c +++ b/ext/fiddle/function.c @@ -59,7 +59,7 @@ const rb_data_type_t function_data_type = { .dfree = deallocate, .dsize = function_memsize }, - .flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED, + .flags = FIDDLE_DEFAULT_TYPED_DATA_FALGS, }; static VALUE @@ -153,6 +153,9 @@ initialize(int argc, VALUE argv[], VALUE self) rb_get_kwargs(kwargs, kw, 0, kw_max_, args); if (args[kw_name] != Qundef) { name = args[kw_name]; +#ifdef HAVE_RB_STR_TO_INTERNED_STR + name = rb_str_to_interned_str(name); +#endif } if (args[kw_need_gvl] != Qundef) { need_gvl = args[kw_need_gvl]; diff --git a/ext/fiddle/handle.c b/ext/fiddle/handle.c index 558d6d45..6260273e 100644 --- a/ext/fiddle/handle.c +++ b/ext/fiddle/handle.c @@ -56,7 +56,8 @@ static const rb_data_type_t fiddle_handle_data_type = { .dfree = fiddle_handle_free, .dsize = fiddle_handle_memsize }, - .flags = RUBY_TYPED_WB_PROTECTED, + .flags = FIDDLE_DEFAULT_TYPED_DATA_FALGS & ~RUBY_TYPED_FREE_IMMEDIATELY, + /* keeping while its symbols are referred. */ }; /* diff --git a/ext/fiddle/memory_view.c b/ext/fiddle/memory_view.c index fa66fc2c..140c8efe 100644 --- a/ext/fiddle/memory_view.c +++ b/ext/fiddle/memory_view.c @@ -64,8 +64,13 @@ fiddle_memview_memsize(const void *ptr) } static const rb_data_type_t fiddle_memview_data_type = { - "fiddle/memory_view", - {fiddle_memview_mark, fiddle_memview_free, fiddle_memview_memsize,}, + .wrap_struct_name = "fiddle/memory_view", + .function = { + .dmark = fiddle_memview_mark, + .dfree = fiddle_memview_free, + .dsize = fiddle_memview_memsize, + }, + .flags = FIDDLE_DEFAULT_TYPED_DATA_FALGS, }; static VALUE diff --git a/ext/fiddle/pinned.c b/ext/fiddle/pinned.c index 019a3020..fb03405a 100644 --- a/ext/fiddle/pinned.c +++ b/ext/fiddle/pinned.c @@ -24,9 +24,13 @@ pinned_memsize(const void *ptr) } static const rb_data_type_t pinned_data_type = { - "fiddle/pinned", - {pinned_mark, xfree, pinned_memsize, }, - 0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED + .wrap_struct_name = "fiddle/pinned", + .function = { + .dmark = pinned_mark, + .dfree = RUBY_TYPED_DEFAULT_FREE, + .dsize = pinned_memsize, + }, + .flags = FIDDLE_DEFAULT_TYPED_DATA_FALGS, }; static VALUE diff --git a/ext/fiddle/pointer.c b/ext/fiddle/pointer.c index 5c375fe9..38e0d3c6 100644 --- a/ext/fiddle/pointer.c +++ b/ext/fiddle/pointer.c @@ -94,7 +94,7 @@ static const rb_data_type_t fiddle_ptr_data_type = { .dfree = fiddle_ptr_free, .dsize = fiddle_ptr_memsize, }, - .flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED + .flags = FIDDLE_DEFAULT_TYPED_DATA_FALGS, }; #ifdef HAVE_RUBY_MEMORY_VIEW_H diff --git a/test/fiddle/test_closure.rb b/test/fiddle/test_closure.rb index 12194190..7923a023 100644 --- a/test/fiddle/test_closure.rb +++ b/test/fiddle/test_closure.rb @@ -157,5 +157,14 @@ def call end end end + + if defined?(Ractor) + def test_ractor_shareable + Closure.create(:int, [:void]) do |c| + Ractor.make_shareable(c) + assert_operator Ractor, :shareable?, c + end + end + end end end if defined?(Fiddle) diff --git a/test/fiddle/test_function.rb b/test/fiddle/test_function.rb index 2822723f..436609c2 100644 --- a/test/fiddle/test_function.rb +++ b/test/fiddle/test_function.rb @@ -259,6 +259,14 @@ def test_no_memory_leak end end + if defined?(Ractor) + def test_ractor_shareable + func = Function.new(@libm['sin'], [TYPE_DOUBLE], TYPE_DOUBLE) + Ractor.make_shareable(func) + assert_operator Ractor, :shareable?, func + end + end + private def perror(m) diff --git a/test/fiddle/test_handle.rb b/test/fiddle/test_handle.rb index 2b555dac..92779201 100644 --- a/test/fiddle/test_handle.rb +++ b/test/fiddle/test_handle.rb @@ -226,5 +226,13 @@ def test_fallback_to_ansi assert_equal(ansi, k["GetFileAttributes"], "should fallback to ANSI version") end end + + if defined?(Ractor) + def test_ractor_shareable + handle = Fiddle::Handle.new(LIBC_SO) + Ractor.make_shareable(handle) + assert_operator Ractor, :shareable?, handle + end + end end end if defined?(Fiddle) diff --git a/test/fiddle/test_memory_view.rb b/test/fiddle/test_memory_view.rb index d44c42d2..68f6622e 100644 --- a/test/fiddle/test_memory_view.rb +++ b/test/fiddle/test_memory_view.rb @@ -159,5 +159,14 @@ def test_to_s mview.release end end + + if defined?(Ractor) + def test_ractor_shareable + ptr = Pointer["hello world"] + mview = MemoryView.new(ptr) + Ractor.make_shareable(mview) + assert_operator Ractor, :shareable?, mview + end + end end end diff --git a/test/fiddle/test_pinned.rb b/test/fiddle/test_pinned.rb index f0d375b1..46263d08 100644 --- a/test/fiddle/test_pinned.rb +++ b/test/fiddle/test_pinned.rb @@ -23,6 +23,14 @@ def test_clear end assert_match "called on", ex.message end + + if defined?(Ractor) + def test_ractor_shareable + x = Object.new + pinner = Pinned.new x + Ractor.make_shareable(pinner) + assert_operator Ractor, :shareable?, pinner + end + end end end - diff --git a/test/fiddle/test_pointer.rb b/test/fiddle/test_pointer.rb index fb83b867..d82850e3 100644 --- a/test/fiddle/test_pointer.rb +++ b/test/fiddle/test_pointer.rb @@ -305,5 +305,13 @@ def test_null_pointer assert_raise(DLError) {nullpo[0]} assert_raise(DLError) {nullpo[0] = 1} end + + if defined?(Ractor) + def test_ractor_shareable + null = Fiddle::NULL + Ractor.make_shareable(null) + assert_operator Ractor, :shareable?, null + end + end end end if defined?(Fiddle) From 2c044f309872107df2aa02680c50fad466fc34e7 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Sun, 5 May 2024 11:44:55 +0900 Subject: [PATCH 2/7] Mark with `ractor` and extract `assert_ractor_shareable` --- test/fiddle/helper.rb | 5 +++++ test/fiddle/test_closure.rb | 9 +++------ test/fiddle/test_function.rb | 8 ++------ test/fiddle/test_handle.rb | 8 ++------ test/fiddle/test_memory_view.rb | 11 ++++------- test/fiddle/test_pinned.rb | 11 ++++------- test/fiddle/test_pointer.rb | 11 +++++------ 7 files changed, 25 insertions(+), 38 deletions(-) diff --git a/test/fiddle/helper.rb b/test/fiddle/helper.rb index fdac53ed..2cf6b3a3 100644 --- a/test/fiddle/helper.rb +++ b/test/fiddle/helper.rb @@ -193,5 +193,10 @@ def under_gc_stress ensure GC.stress = stress end + + def assert_ractor_shareable(object) + Ractor.make_shareable(object) + assert_operator Ractor, :shareable?, object + end end end diff --git a/test/fiddle/test_closure.rb b/test/fiddle/test_closure.rb index 7923a023..14cf5440 100644 --- a/test/fiddle/test_closure.rb +++ b/test/fiddle/test_closure.rb @@ -158,12 +158,9 @@ def call end end - if defined?(Ractor) - def test_ractor_shareable - Closure.create(:int, [:void]) do |c| - Ractor.make_shareable(c) - assert_operator Ractor, :shareable?, c - end + ractor def test_ractor_shareable + Closure.create(:int, [:void]) do |c| + assert_ractor_shareable(c) end end end diff --git a/test/fiddle/test_function.rb b/test/fiddle/test_function.rb index 436609c2..e09601f7 100644 --- a/test/fiddle/test_function.rb +++ b/test/fiddle/test_function.rb @@ -259,12 +259,8 @@ def test_no_memory_leak end end - if defined?(Ractor) - def test_ractor_shareable - func = Function.new(@libm['sin'], [TYPE_DOUBLE], TYPE_DOUBLE) - Ractor.make_shareable(func) - assert_operator Ractor, :shareable?, func - end + ractor def test_ractor_shareable + assert_ractor_shareable(Function.new(@libm['sin'], [TYPE_DOUBLE], TYPE_DOUBLE)) end private diff --git a/test/fiddle/test_handle.rb b/test/fiddle/test_handle.rb index 92779201..3c9d8b93 100644 --- a/test/fiddle/test_handle.rb +++ b/test/fiddle/test_handle.rb @@ -227,12 +227,8 @@ def test_fallback_to_ansi end end - if defined?(Ractor) - def test_ractor_shareable - handle = Fiddle::Handle.new(LIBC_SO) - Ractor.make_shareable(handle) - assert_operator Ractor, :shareable?, handle - end + ractor def test_ractor_shareable + assert_ractor_shareable(Fiddle::Handle.new(LIBC_SO)) end end end if defined?(Fiddle) diff --git a/test/fiddle/test_memory_view.rb b/test/fiddle/test_memory_view.rb index 68f6622e..da31784b 100644 --- a/test/fiddle/test_memory_view.rb +++ b/test/fiddle/test_memory_view.rb @@ -160,13 +160,10 @@ def test_to_s end end - if defined?(Ractor) - def test_ractor_shareable - ptr = Pointer["hello world"] - mview = MemoryView.new(ptr) - Ractor.make_shareable(mview) - assert_operator Ractor, :shareable?, mview - end + ractor def test_ractor_shareable + ptr = Pointer["hello world"] + assert_ractor_shareable MemoryView.new(ptr) + assert_predicate ptr, :frozen? end end end diff --git a/test/fiddle/test_pinned.rb b/test/fiddle/test_pinned.rb index 46263d08..93deaf8c 100644 --- a/test/fiddle/test_pinned.rb +++ b/test/fiddle/test_pinned.rb @@ -24,13 +24,10 @@ def test_clear assert_match "called on", ex.message end - if defined?(Ractor) - def test_ractor_shareable - x = Object.new - pinner = Pinned.new x - Ractor.make_shareable(pinner) - assert_operator Ractor, :shareable?, pinner - end + ractor def test_ractor_shareable + obj = Object.new + assert_ractor_shareable(Pinned.new(obj)) + assert_predicate obj, :frozen? end end end diff --git a/test/fiddle/test_pointer.rb b/test/fiddle/test_pointer.rb index d82850e3..f71846f6 100644 --- a/test/fiddle/test_pointer.rb +++ b/test/fiddle/test_pointer.rb @@ -306,12 +306,11 @@ def test_null_pointer assert_raise(DLError) {nullpo[0] = 1} end - if defined?(Ractor) - def test_ractor_shareable - null = Fiddle::NULL - Ractor.make_shareable(null) - assert_operator Ractor, :shareable?, null - end + ractor def test_ractor_shareable + assert_ractor_shareable(Fiddle::NULL) + ary = [0,1,2,4,5] + addr = Pointer.new(dlwrap(ary)) + assert_ractor_shareable(addr) end end end if defined?(Fiddle) From 48962650463f0b7d15fb1203f2758c09ac860ce4 Mon Sep 17 00:00:00 2001 From: Sutou Kouhei Date: Fri, 11 Oct 2024 14:44:23 +0900 Subject: [PATCH 3/7] Use omit instead of ractor --- test/fiddle/test_closure.rb | 10 ++++++++-- test/fiddle/test_function.rb | 3 ++- test/fiddle/test_handle.rb | 3 ++- test/fiddle/test_memory_view.rb | 3 ++- test/fiddle/test_pinned.rb | 3 ++- test/fiddle/test_pointer.rb | 3 ++- 6 files changed, 18 insertions(+), 7 deletions(-) diff --git a/test/fiddle/test_closure.rb b/test/fiddle/test_closure.rb index 14cf5440..26cff8e5 100644 --- a/test/fiddle/test_closure.rb +++ b/test/fiddle/test_closure.rb @@ -158,8 +158,14 @@ def call end end - ractor def test_ractor_shareable - Closure.create(:int, [:void]) do |c| + def test_ractor_shareable + omit("Need Ractor") unless defined?(Ractor) + closure_class = Class.new(Closure) do + def call + 0 + end + end + closure_class.create(:int, [:void]) do |c| assert_ractor_shareable(c) end end diff --git a/test/fiddle/test_function.rb b/test/fiddle/test_function.rb index e09601f7..6ec40bee 100644 --- a/test/fiddle/test_function.rb +++ b/test/fiddle/test_function.rb @@ -259,7 +259,8 @@ def test_no_memory_leak end end - ractor def test_ractor_shareable + def test_ractor_shareable + omit("Need Ractor") unless defined?(Ractor) assert_ractor_shareable(Function.new(@libm['sin'], [TYPE_DOUBLE], TYPE_DOUBLE)) end diff --git a/test/fiddle/test_handle.rb b/test/fiddle/test_handle.rb index 3c9d8b93..e0ad17a9 100644 --- a/test/fiddle/test_handle.rb +++ b/test/fiddle/test_handle.rb @@ -227,7 +227,8 @@ def test_fallback_to_ansi end end - ractor def test_ractor_shareable + def test_ractor_shareable + omit("Need Ractor") unless defined?(Ractor) assert_ractor_shareable(Fiddle::Handle.new(LIBC_SO)) end end diff --git a/test/fiddle/test_memory_view.rb b/test/fiddle/test_memory_view.rb index da31784b..1e9b84d3 100644 --- a/test/fiddle/test_memory_view.rb +++ b/test/fiddle/test_memory_view.rb @@ -160,7 +160,8 @@ def test_to_s end end - ractor def test_ractor_shareable + def test_ractor_shareable + omit("Need Ractor") unless defined?(Ractor) ptr = Pointer["hello world"] assert_ractor_shareable MemoryView.new(ptr) assert_predicate ptr, :frozen? diff --git a/test/fiddle/test_pinned.rb b/test/fiddle/test_pinned.rb index 93deaf8c..d0878146 100644 --- a/test/fiddle/test_pinned.rb +++ b/test/fiddle/test_pinned.rb @@ -24,7 +24,8 @@ def test_clear assert_match "called on", ex.message end - ractor def test_ractor_shareable + def test_ractor_shareable + omit("Need Ractor") unless defined?(Ractor) obj = Object.new assert_ractor_shareable(Pinned.new(obj)) assert_predicate obj, :frozen? diff --git a/test/fiddle/test_pointer.rb b/test/fiddle/test_pointer.rb index f71846f6..f2da878a 100644 --- a/test/fiddle/test_pointer.rb +++ b/test/fiddle/test_pointer.rb @@ -306,7 +306,8 @@ def test_null_pointer assert_raise(DLError) {nullpo[0] = 1} end - ractor def test_ractor_shareable + def test_ractor_shareable + omit("Need Ractor") unless defined?(Ractor) assert_ractor_shareable(Fiddle::NULL) ary = [0,1,2,4,5] addr = Pointer.new(dlwrap(ary)) From 0d9bad320320702c2b79cc5732b08da83bfdc126 Mon Sep 17 00:00:00 2001 From: Sutou Kouhei Date: Fri, 11 Oct 2024 14:45:59 +0900 Subject: [PATCH 4/7] Fix a typo --- ext/fiddle/closure.c | 2 +- ext/fiddle/fiddle.h | 2 +- ext/fiddle/function.c | 2 +- ext/fiddle/handle.c | 2 +- ext/fiddle/memory_view.c | 2 +- ext/fiddle/pinned.c | 2 +- ext/fiddle/pointer.c | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/ext/fiddle/closure.c b/ext/fiddle/closure.c index cdb3853e..d526d870 100644 --- a/ext/fiddle/closure.c +++ b/ext/fiddle/closure.c @@ -61,7 +61,7 @@ const rb_data_type_t closure_data_type = { .dfree = dealloc, .dsize = closure_memsize }, - .flags = FIDDLE_DEFAULT_TYPED_DATA_FALGS, + .flags = FIDDLE_DEFAULT_TYPED_DATA_FLAGS, }; struct callback_args { diff --git a/ext/fiddle/fiddle.h b/ext/fiddle/fiddle.h index edd96bb0..c0ab8a91 100644 --- a/ext/fiddle/fiddle.h +++ b/ext/fiddle/fiddle.h @@ -237,7 +237,7 @@ typedef void (*rb_fiddle_freefunc_t)(void*); VALUE rb_fiddle_ptr_new_wrap(void *ptr, long size, rb_fiddle_freefunc_t func, VALUE wrap0, VALUE wrap1); enum { - FIDDLE_DEFAULT_TYPED_DATA_FALGS = ( + FIDDLE_DEFAULT_TYPED_DATA_FLAGS = ( RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | #ifdef RUBY_TYPED_FROZEN_SHAREABLE diff --git a/ext/fiddle/function.c b/ext/fiddle/function.c index 0184cd20..21a7ad6d 100644 --- a/ext/fiddle/function.c +++ b/ext/fiddle/function.c @@ -59,7 +59,7 @@ const rb_data_type_t function_data_type = { .dfree = deallocate, .dsize = function_memsize }, - .flags = FIDDLE_DEFAULT_TYPED_DATA_FALGS, + .flags = FIDDLE_DEFAULT_TYPED_DATA_FLAGS, }; static VALUE diff --git a/ext/fiddle/handle.c b/ext/fiddle/handle.c index 6260273e..0d03133c 100644 --- a/ext/fiddle/handle.c +++ b/ext/fiddle/handle.c @@ -56,7 +56,7 @@ static const rb_data_type_t fiddle_handle_data_type = { .dfree = fiddle_handle_free, .dsize = fiddle_handle_memsize }, - .flags = FIDDLE_DEFAULT_TYPED_DATA_FALGS & ~RUBY_TYPED_FREE_IMMEDIATELY, + .flags = FIDDLE_DEFAULT_TYPED_DATA_FLAGS & ~RUBY_TYPED_FREE_IMMEDIATELY, /* keeping while its symbols are referred. */ }; diff --git a/ext/fiddle/memory_view.c b/ext/fiddle/memory_view.c index 140c8efe..5fd7b9b4 100644 --- a/ext/fiddle/memory_view.c +++ b/ext/fiddle/memory_view.c @@ -70,7 +70,7 @@ static const rb_data_type_t fiddle_memview_data_type = { .dfree = fiddle_memview_free, .dsize = fiddle_memview_memsize, }, - .flags = FIDDLE_DEFAULT_TYPED_DATA_FALGS, + .flags = FIDDLE_DEFAULT_TYPED_DATA_FLAGS, }; static VALUE diff --git a/ext/fiddle/pinned.c b/ext/fiddle/pinned.c index fb03405a..94962b0f 100644 --- a/ext/fiddle/pinned.c +++ b/ext/fiddle/pinned.c @@ -30,7 +30,7 @@ static const rb_data_type_t pinned_data_type = { .dfree = RUBY_TYPED_DEFAULT_FREE, .dsize = pinned_memsize, }, - .flags = FIDDLE_DEFAULT_TYPED_DATA_FALGS, + .flags = FIDDLE_DEFAULT_TYPED_DATA_FLAGS, }; static VALUE diff --git a/ext/fiddle/pointer.c b/ext/fiddle/pointer.c index 38e0d3c6..00bd76e9 100644 --- a/ext/fiddle/pointer.c +++ b/ext/fiddle/pointer.c @@ -94,7 +94,7 @@ static const rb_data_type_t fiddle_ptr_data_type = { .dfree = fiddle_ptr_free, .dsize = fiddle_ptr_memsize, }, - .flags = FIDDLE_DEFAULT_TYPED_DATA_FALGS, + .flags = FIDDLE_DEFAULT_TYPED_DATA_FLAGS, }; #ifdef HAVE_RUBY_MEMORY_VIEW_H From 5166810cffbfb3c7e49598c9270be3b690bbf23b Mon Sep 17 00:00:00 2001 From: Sutou Kouhei Date: Fri, 11 Oct 2024 14:50:42 +0900 Subject: [PATCH 5/7] Ensure releasing --- test/fiddle/test_memory_view.rb | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/test/fiddle/test_memory_view.rb b/test/fiddle/test_memory_view.rb index 1e9b84d3..3b9509c7 100644 --- a/test/fiddle/test_memory_view.rb +++ b/test/fiddle/test_memory_view.rb @@ -163,8 +163,13 @@ def test_to_s def test_ractor_shareable omit("Need Ractor") unless defined?(Ractor) ptr = Pointer["hello world"] - assert_ractor_shareable MemoryView.new(ptr) - assert_predicate ptr, :frozen? + mview = MemoryView.new(ptr) + begin + assert_ractor_shareable mview + assert_predicate ptr, :frozen? + ensure + mview.release + end end end end From 46d42726896e17058c1e850d091310b4062788cd Mon Sep 17 00:00:00 2001 From: Sutou Kouhei Date: Fri, 11 Oct 2024 14:58:19 +0900 Subject: [PATCH 6/7] Add missing () --- test/fiddle/helper.rb | 2 +- test/fiddle/test_memory_view.rb | 4 ++-- test/fiddle/test_pinned.rb | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/test/fiddle/helper.rb b/test/fiddle/helper.rb index 2cf6b3a3..457e02f5 100644 --- a/test/fiddle/helper.rb +++ b/test/fiddle/helper.rb @@ -196,7 +196,7 @@ def under_gc_stress def assert_ractor_shareable(object) Ractor.make_shareable(object) - assert_operator Ractor, :shareable?, object + assert_operator(Ractor, :shareable?, object) end end end diff --git a/test/fiddle/test_memory_view.rb b/test/fiddle/test_memory_view.rb index 3b9509c7..da00d66c 100644 --- a/test/fiddle/test_memory_view.rb +++ b/test/fiddle/test_memory_view.rb @@ -165,8 +165,8 @@ def test_ractor_shareable ptr = Pointer["hello world"] mview = MemoryView.new(ptr) begin - assert_ractor_shareable mview - assert_predicate ptr, :frozen? + assert_ractor_shareable(mview) + assert_predicate(ptr, :frozen?) ensure mview.release end diff --git a/test/fiddle/test_pinned.rb b/test/fiddle/test_pinned.rb index d0878146..ad132579 100644 --- a/test/fiddle/test_pinned.rb +++ b/test/fiddle/test_pinned.rb @@ -28,7 +28,7 @@ def test_ractor_shareable omit("Need Ractor") unless defined?(Ractor) obj = Object.new assert_ractor_shareable(Pinned.new(obj)) - assert_predicate obj, :frozen? + assert_predicate(obj, :frozen?) end end end From 172429e647e791659003ff8689e1db4ca233235f Mon Sep 17 00:00:00 2001 From: Sutou Kouhei Date: Fri, 11 Oct 2024 14:58:37 +0900 Subject: [PATCH 7/7] Add missing spaces --- test/fiddle/test_pointer.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/fiddle/test_pointer.rb b/test/fiddle/test_pointer.rb index f2da878a..d46fb662 100644 --- a/test/fiddle/test_pointer.rb +++ b/test/fiddle/test_pointer.rb @@ -309,7 +309,7 @@ def test_null_pointer def test_ractor_shareable omit("Need Ractor") unless defined?(Ractor) assert_ractor_shareable(Fiddle::NULL) - ary = [0,1,2,4,5] + ary = [0, 1, 2, 4, 5] addr = Pointer.new(dlwrap(ary)) assert_ractor_shareable(addr) end