summaryrefslogtreecommitdiff
path: root/io_buffer.c
diff options
context:
space:
mode:
Diffstat (limited to 'io_buffer.c')
-rw-r--r--io_buffer.c16
1 files 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
@@ -273,13 +273,6 @@ io_buffer_free(struct rb_io_buffer *buffer)
}
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)
{
struct rb_io_buffer *buffer = _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