From 58de1fff510078e3d2d8cfce033c87299adf78f0 Mon Sep 17 00:00:00 2001 From: Tor Andersson Date: Thu, 11 Nov 2004 07:15:07 +0100 Subject: filter reference counting --- filter/filter.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) (limited to 'filter/filter.c') diff --git a/filter/filter.c b/filter/filter.c index 25bbd441..4bd8c4ff 100644 --- a/filter/filter.c +++ b/filter/filter.c @@ -1,8 +1,8 @@ #include -fz_error fz_kioneedin = { "", "", "filter.c", 0, 1 }; -fz_error fz_kioneedout = { "", "", "filter.c", 0, 1 }; -fz_error fz_kiodone = { "", "", "filter.c", 0, 1 }; +fz_error fz_kioneedin = { -1, "", "", "filter.c", 0 }; +fz_error fz_kioneedout = { -1, "", "", "filter.c", 0 }; +fz_error fz_kiodone = { -1, "", "", "filter.c", 0 }; fz_error * fz_process(fz_filter *f, fz_buffer *in, fz_buffer *out) @@ -31,11 +31,21 @@ fz_process(fz_filter *f, fz_buffer *in, fz_buffer *out) return reason; } +fz_filter * +fz_keepfilter(fz_filter *f) +{ + f->nrefs ++; + return f; +} + void fz_dropfilter(fz_filter *f) { - if (f->drop) - f->drop(f); - fz_free(f); + if (--f->nrefs == 0) + { + if (f->drop) + f->drop(f); + fz_free(f); + } } -- cgit v1.2.3