Skip to content

Commit 860cb19

Browse files
Mark rb_io_buffer_type references declaratively
allowing them to support compaction and be moved.
1 parent 532b924 commit 860cb19

File tree

1 file changed

+7
-9
lines changed

1 file changed

+7
-9
lines changed

io_buffer.c

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -272,13 +272,6 @@ io_buffer_free(struct rb_io_buffer *buffer)
272272
#endif
273273
}
274274

275-
void
276-
rb_io_buffer_type_mark(void *_buffer)
277-
{
278-
struct rb_io_buffer *buffer = _buffer;
279-
rb_gc_mark(buffer->source);
280-
}
281-
282275
void
283276
rb_io_buffer_type_free(void *_buffer)
284277
{
@@ -300,15 +293,20 @@ rb_io_buffer_type_size(const void *_buffer)
300293
return total;
301294
}
302295

296+
RUBY_REFERENCES(io_buffer_refs) = {
297+
RUBY_REF_EDGE(struct rb_io_buffer, source),
298+
RUBY_REF_END
299+
};
300+
303301
static const rb_data_type_t rb_io_buffer_type = {
304302
.wrap_struct_name = "IO::Buffer",
305303
.function = {
306-
.dmark = rb_io_buffer_type_mark,
304+
.dmark = RUBY_REFS_LIST_PTR(io_buffer_refs),
307305
.dfree = rb_io_buffer_type_free,
308306
.dsize = rb_io_buffer_type_size,
309307
},
310308
.data = NULL,
311-
.flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE,
309+
.flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE | RUBY_TYPED_DECL_MARKING,
312310
};
313311

314312
static inline enum rb_io_buffer_flags

0 commit comments

Comments
 (0)