ruby-changes:69636
From: Kenta <ko1@a...>
Date: Mon, 8 Nov 2021 12:52:26 +0900 (JST)
Subject: [ruby-changes:69636] 3501e0cbb5 (master): memory_view.c: Add _memory_view_entry member in rb_memory_view_t (#5088)
https://git.ruby-lang.org/ruby.git/commit/?id=3501e0cbb5 From 3501e0cbb5b6043b851686d2649e5ff7e9cf2b77 Mon Sep 17 00:00:00 2001 From: Kenta Murata <mrkn@u...> Date: Mon, 8 Nov 2021 12:52:09 +0900 Subject: memory_view.c: Add _memory_view_entry member in rb_memory_view_t (#5088) --- include/ruby/memory_view.h | 12 ++++++++---- memory_view.c | 7 ++++--- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/include/ruby/memory_view.h b/include/ruby/memory_view.h index bac49e363ed..83931038a05 100644 --- a/include/ruby/memory_view.h +++ b/include/ruby/memory_view.h @@ -146,8 +146,11 @@ typedef struct { https://github.com/ruby/ruby/blob/trunk/include/ruby/memory_view.h#L146 * Or, NULL when this memory view exposes a flat array. */ const ssize_t *sub_offsets; - /** the private data for managing this exported memory */ + /** The private data for managing this exported memory */ void *private_data; + + /** DO NOT TOUCH THIS: The memory view entry for the internal use */ + const struct rb_memory_view_entry *_memory_view_entry; } rb_memory_view_t; /** Type of function of ::rb_memory_view_entry_t::get_func. */ @@ -160,9 +163,10 @@ typedef bool (* rb_memory_view_release_func_t)(VALUE obj, rb_memory_view_t *view https://github.com/ruby/ruby/blob/trunk/include/ruby/memory_view.h#L163 typedef bool (* rb_memory_view_available_p_func_t)(VALUE obj); /** Operations applied to a specific kind of a memory view. */ -typedef struct { - - /** Exports a memory view from a Ruby object. */ +typedef struct rb_memory_view_entry { + /** + * Exports a memory view from a Ruby object. + */ rb_memory_view_get_func_t get_func; /** diff --git a/memory_view.c b/memory_view.c index b08f13e2863..637d427e860 100644 --- a/memory_view.c +++ b/memory_view.c @@ -108,7 +108,8 @@ static void https://github.com/ruby/ruby/blob/trunk/memory_view.c#L108 unregister_exported_object(VALUE obj) { RB_VM_LOCK_ENTER(); - st_update(exported_object_table, (st_data_t)obj, exported_object_dec_ref, 0); + if (exported_object_table) + st_update(exported_object_table, (st_data_t)obj, exported_object_dec_ref, 0); RB_VM_LOCK_LEAVE(); } @@ -822,6 +823,7 @@ rb_memory_view_get(VALUE obj, rb_memory_view_t* view, int flags) https://github.com/ruby/ruby/blob/trunk/memory_view.c#L823 bool rv = (*entry->get_func)(obj, view, flags); if (rv) { + view->_memory_view_entry = entry; register_exported_object(view->obj); } return rv; @@ -834,8 +836,7 @@ rb_memory_view_get(VALUE obj, rb_memory_view_t* view, int flags) https://github.com/ruby/ruby/blob/trunk/memory_view.c#L836 bool rb_memory_view_release(rb_memory_view_t* view) { - VALUE klass = CLASS_OF(view->obj); - const rb_memory_view_entry_t *entry = lookup_memory_view_entry(klass); + const rb_memory_view_entry_t *entry = view->_memory_view_entry; if (entry) { bool rv = true; if (entry->release_func) { -- cgit v1.2.1 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/