summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSøren Sandmann Pedersen <ssp@redhat.com>2012-10-04 20:43:11 -0400
committerSøren Sandmann Pedersen <ssp@redhat.com>2012-10-04 20:43:11 -0400
commit3d47e780cd8341316a2e52012f38ab1d45f906ba (patch)
tree517e107e3421ece3d32c62c31075805e6017913e
parent413b32014e7ee5bfeccd8c47d4aa49b9b1f084e2 (diff)
memory management
-rw-r--r--fragment.c25
1 files 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);
}