diff options
Diffstat (limited to 'ext/zlib/zlib.c')
-rw-r--r-- | ext/zlib/zlib.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/ext/zlib/zlib.c b/ext/zlib/zlib.c index b129e2eeb5..794cf3b103 100644 --- a/ext/zlib/zlib.c +++ b/ext/zlib/zlib.c @@ -1226,6 +1226,17 @@ zstream_finalize(struct zstream *z) finalizer_warn("the stream was freed prematurely."); } +static void +zstream_free(void *p) +{ + struct zstream *z = p; + + if (ZSTREAM_IS_READY(z)) { + zstream_finalize(z); + } + xfree(z); +} + static size_t zstream_memsize(const void *p) { @@ -1235,7 +1246,7 @@ zstream_memsize(const void *p) static const rb_data_type_t zstream_data_type = { "zstream", - { zstream_mark, xfree, zstream_memsize, }, + { zstream_mark, zstream_free, zstream_memsize, }, 0, 0, RUBY_TYPED_FREE_IMMEDIATELY }; |