From 6012145299cfa4ab561360c78710c7f2941a7e9d Mon Sep 17 00:00:00 2001 From: Matt Valentine-House Date: Mon, 31 Mar 2025 11:38:16 +0100 Subject: [PATCH] Mark rb_io_buffer_type references declaratively allowing them to support compaction and be moved. --- io_buffer.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/io_buffer.c b/io_buffer.c index a4b7d30018..140571bdbc 100644 --- a/io_buffer.c +++ b/io_buffer.c @@ -272,13 +272,6 @@ io_buffer_free(struct rb_io_buffer *buffer) #endif } -void -rb_io_buffer_type_mark(void *_buffer) -{ - struct rb_io_buffer *buffer = _buffer; - rb_gc_mark(buffer->source); -} - void rb_io_buffer_type_free(void *_buffer) { @@ -300,15 +293,20 @@ rb_io_buffer_type_size(const void *_buffer) return total; } +RUBY_REFERENCES(io_buffer_refs) = { + RUBY_REF_EDGE(struct rb_io_buffer, source), + RUBY_REF_END +}; + static const rb_data_type_t rb_io_buffer_type = { .wrap_struct_name = "IO::Buffer", .function = { - .dmark = rb_io_buffer_type_mark, + .dmark = RUBY_REFS_LIST_PTR(io_buffer_refs), .dfree = rb_io_buffer_type_free, .dsize = rb_io_buffer_type_size, }, .data = NULL, - .flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE, + .flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE | RUBY_TYPED_DECL_MARKING, }; static inline enum rb_io_buffer_flags