@@ -88,8 +88,13 @@ fiddle_ptr_memsize(const void *ptr)
8888}
8989
9090static const rb_data_type_t fiddle_ptr_data_type = {
91- "fiddle/pointer" ,
92- {fiddle_ptr_mark , fiddle_ptr_free , fiddle_ptr_memsize ,},
91+ .wrap_struct_name = "fiddle/pointer" ,
92+ .function = {
93+ .dmark = fiddle_ptr_mark ,
94+ .dfree = fiddle_ptr_free ,
95+ .dsize = fiddle_ptr_memsize ,
96+ },
97+ .flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED
9398};
9499
95100#ifdef HAVE_RUBY_MEMORY_VIEW_H
@@ -135,8 +140,8 @@ rb_fiddle_ptr_new2(VALUE klass, void *ptr, long size, freefunc_t func, VALUE wra
135140 data -> free = func ;
136141 data -> freed = false;
137142 data -> size = size ;
138- data -> wrap [0 ] = wrap0 ;
139- data -> wrap [1 ] = wrap1 ;
143+ RB_OBJ_WRITE ( val , & data -> wrap [0 ], wrap0 ) ;
144+ RB_OBJ_WRITE ( val , & data -> wrap [1 ], wrap1 ) ;
140145
141146 return val ;
142147}
@@ -235,8 +240,8 @@ rb_fiddle_ptr_initialize(int argc, VALUE argv[], VALUE self)
235240 /* Free previous memory. Use of inappropriate initialize may cause SEGV. */
236241 (* (data -> free ))(data -> ptr );
237242 }
238- data -> wrap [0 ] = wrap ;
239- data -> wrap [1 ] = funcwrap ;
243+ RB_OBJ_WRITE ( self , & data -> wrap [0 ], wrap ) ;
244+ RB_OBJ_WRITE ( self , & data -> wrap [1 ], funcwrap ) ;
240245 data -> ptr = p ;
241246 data -> size = s ;
242247 data -> free = f ;
@@ -314,7 +319,7 @@ rb_fiddle_ptr_s_malloc(int argc, VALUE argv[], VALUE klass)
314319 }
315320
316321 obj = rb_fiddle_ptr_malloc (klass , s ,f );
317- if (wrap ) RPTR_DATA (obj )-> wrap [1 ] = wrap ;
322+ if (wrap ) RB_OBJ_WRITE ( obj , & RPTR_DATA (obj )-> wrap [1 ], wrap ) ;
318323
319324 if (rb_block_given_p ()) {
320325 if (!f ) {
@@ -795,7 +800,7 @@ rb_fiddle_ptr_s_to_ptr(VALUE self, VALUE val)
795800 if (num == val ) wrap = 0 ;
796801 ptr = rb_fiddle_ptr_new (NUM2PTR (num ), 0 , NULL );
797802 }
798- if (wrap ) RPTR_DATA (ptr )-> wrap [0 ] = wrap ;
803+ if (wrap ) RB_OBJ_WRITE ( ptr , & RPTR_DATA (ptr )-> wrap [0 ], wrap ) ;
799804 return ptr ;
800805}
801806
0 commit comments