@@ -88,8 +88,13 @@ fiddle_ptr_memsize(const void *ptr)
88
88
}
89
89
90
90
static 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
93
98
};
94
99
95
100
#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
135
140
data -> free = func ;
136
141
data -> freed = false;
137
142
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 ) ;
140
145
141
146
return val ;
142
147
}
@@ -235,8 +240,8 @@ rb_fiddle_ptr_initialize(int argc, VALUE argv[], VALUE self)
235
240
/* Free previous memory. Use of inappropriate initialize may cause SEGV. */
236
241
(* (data -> free ))(data -> ptr );
237
242
}
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 ) ;
240
245
data -> ptr = p ;
241
246
data -> size = s ;
242
247
data -> free = f ;
@@ -314,7 +319,7 @@ rb_fiddle_ptr_s_malloc(int argc, VALUE argv[], VALUE klass)
314
319
}
315
320
316
321
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 ) ;
318
323
319
324
if (rb_block_given_p ()) {
320
325
if (!f ) {
@@ -795,7 +800,7 @@ rb_fiddle_ptr_s_to_ptr(VALUE self, VALUE val)
795
800
if (num == val ) wrap = 0 ;
796
801
ptr = rb_fiddle_ptr_new (NUM2PTR (num ), 0 , NULL );
797
802
}
798
- if (wrap ) RPTR_DATA (ptr )-> wrap [0 ] = wrap ;
803
+ if (wrap ) RB_OBJ_WRITE ( ptr , & RPTR_DATA (ptr )-> wrap [0 ], wrap ) ;
799
804
return ptr ;
800
805
}
801
806
0 commit comments