aboutsummaryrefslogtreecommitdiffstats
path: root/ext/zlib/zlib.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/zlib/zlib.c')
-rw-r--r--ext/zlib/zlib.c13
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
};