[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]