about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <bofh@yhbt.net>2024-01-23 12:57:45 +0000
committerEric Wong <bofh@yhbt.net>2024-02-01 07:18:28 +0000
commit4ae4cf792bd794533b8f2ae90f41ff277f97fc9b (patch)
treec3651594fc6b65ca4bbc2ba90c3db4a739aaf391
parent6b0768f8791c5d6dd2e8a5aea0da76d46549477e (diff)
downloadclogger-master.tar.gz
This gives us memsize information and appears to fix a leak
under Ruby 3.3.
-rw-r--r--ext/clogger_ext/clogger.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/ext/clogger_ext/clogger.c b/ext/clogger_ext/clogger.c
index 1993ae8..cea4072 100644
--- a/ext/clogger_ext/clogger.c
+++ b/ext/clogger_ext/clogger.c
@@ -229,18 +229,28 @@ static void clogger_mark(void *ptr)
         rb_gc_mark(c->body);
 }
 
+static size_t memsize(const void *ptr)
+{
+        return sizeof(struct clogger);
+}
+
+static const rb_data_type_t clogger_type = {
+        "clogger",
+        { clogger_mark, RUBY_TYPED_DEFAULT_FREE, memsize, /* reserved */ },
+};
+
 static VALUE clogger_alloc(VALUE klass)
 {
         struct clogger *c;
 
-        return Data_Make_Struct(klass, struct clogger, clogger_mark, -1, c);
+        return TypedData_Make_Struct(klass, struct clogger, &clogger_type, c);
 }
 
 static struct clogger *clogger_get(VALUE self)
 {
         struct clogger *c;
 
-        Data_Get_Struct(self, struct clogger, c);
+        TypedData_Get_Struct(self, struct clogger, &clogger_type, c);
         assert(c);
         return c;
 }