diff options
author | Eric Wong <bofh@yhbt.net> | 2024-01-23 12:57:45 +0000 |
---|---|---|
committer | Eric Wong <bofh@yhbt.net> | 2024-02-01 07:18:28 +0000 |
commit | 4ae4cf792bd794533b8f2ae90f41ff277f97fc9b (patch) | |
tree | c3651594fc6b65ca4bbc2ba90c3db4a739aaf391 | |
parent | 6b0768f8791c5d6dd2e8a5aea0da76d46549477e (diff) | |
download | clogger-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.c | 14 |
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; } |