diff options
author | Søren Sandmann Pedersen <ssp@redhat.com> | 2012-10-04 20:43:11 -0400 |
---|---|---|
committer | Søren Sandmann Pedersen <ssp@redhat.com> | 2012-10-04 20:43:11 -0400 |
commit | 3d47e780cd8341316a2e52012f38ab1d45f906ba (patch) | |
tree | 517e107e3421ece3d32c62c31075805e6017913e | |
parent | 413b32014e7ee5bfeccd8c47d4aa49b9b1f084e2 (diff) |
memory management
-rw-r--r-- | fragment.c | 25 |
1 files changed, 23 insertions, 2 deletions
@@ -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); } |