From 3d47e780cd8341316a2e52012f38ab1d45f906ba Mon Sep 17 00:00:00 2001 From: Søren Sandmann Pedersen Date: Thu, 4 Oct 2012 20:43:11 -0400 Subject: memory management --- fragment.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/fragment.c b/fragment.c index efe8ee3..a8e0f52 100644 --- a/fragment.c +++ b/fragment.c @@ -105,7 +105,26 @@ state_unref (state_t *state) { if (--state->common.ref_count == 0) { - /* FIXME - check the states */ + switch (state->common.type) + { + case STATE_WHITE: + case STATE_BLANK: + break; + case STATE_TRAPS: + free (state->traps.traps); + break; + case STATE_GLYPHS: + free (state->glyphs.glyphs); + break; + case STATE_IMAGE: + pixman_image_unref (state->image.image); + break; + case STATE_COMMAND: + state_unref (state->command.dest); + state_unref (state->command.source); + break; + } + free (state); } } @@ -291,7 +310,9 @@ fragment_composite (fragment_t *dest, pixman_op_t op, fragment_t *source) void fragment_free (fragment_t *fragment) { - /* FIXME */ + if (fragment->broken) + return; + pixman_region32_fini (&fragment->region); state_unref (fragment->state); } -- cgit v1.2.3