From b557ece715c9324d4e3cde10bda94d6ae90311cc Mon Sep 17 00:00:00 2001 From: Tor Andersson Date: Wed, 4 May 2016 21:19:38 +0200 Subject: Reference count fz_device. Language bindings sometimes require objects to be reference counted. --- source/fitz/device.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) (limited to 'source') diff --git a/source/fitz/device.c b/source/fitz/device.c index df2d4f86..4379bb21 100644 --- a/source/fitz/device.c +++ b/source/fitz/device.c @@ -3,7 +3,9 @@ void * fz_new_device(fz_context *ctx, int size) { - return Memento_label(fz_calloc(ctx, 1, size), "fz_device"); + fz_device *dev = Memento_label(fz_calloc(ctx, 1, size), "fz_device"); + dev->refs = 1; + return dev; } void @@ -40,15 +42,22 @@ fz_close_device(fz_context *ctx, fz_device *dev) dev->end_tile = NULL; } +fz_device * +fz_keep_device(fz_context *ctx, fz_device *dev) +{ + return fz_keep_imp(ctx, dev, &dev->refs); +} + void fz_drop_device(fz_context *ctx, fz_device *dev) { - if (dev == NULL) - return; - if (dev->close) - dev->close(ctx, dev); - fz_free(ctx, dev->container); - fz_free(ctx, dev); + if (fz_drop_imp(ctx, dev, &dev->refs)) + { + if (dev->close) + dev->close(ctx, dev); + fz_free(ctx, dev->container); + fz_free(ctx, dev); + } } void -- cgit v1.2.3