aboutsummaryrefslogtreecommitdiffstats
path: root/memory_view.c
diff options
context:
space:
mode:
authorKenta Murata <mrkn@users.noreply.github.com>2021-11-08 12:52:09 +0900
committerGitHub <noreply@github.com>2021-11-08 12:52:09 +0900
commit3501e0cbb5b6043b851686d2649e5ff7e9cf2b77 (patch)
tree8e01ca1b0936dbfb2992142ddb833fc8bfc72844 /memory_view.c
parente0a5c3d2b71dfad038d7562fdd33f02ffd79232d (diff)
downloadruby-3501e0cbb5b6043b851686d2649e5ff7e9cf2b77.tar.gz
memory_view.c: Add _memory_view_entry member in rb_memory_view_t (#5088)
Diffstat (limited to 'memory_view.c')
-rw-r--r--memory_view.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/memory_view.c b/memory_view.c
index b08f13e286..637d427e86 100644
--- a/memory_view.c
+++ b/memory_view.c
@@ -108,7 +108,8 @@ static void
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)
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)
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) {