summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2012-03-23 00:31:58 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2012-03-23 00:34:45 +0000
commit8a65d8e2de7d26bf285953a327b24a667eee62da (patch)
tree7eedc6b133e7e62a799769a3a78b2556f4cf9524
parentbc97bcf0efec761dff3e77499e1dfa42fdefef59 (diff)
image: Fix leak of white solid color for masked composition of CLEAR
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r--src/cairo-image-compositor.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/cairo-image-compositor.c b/src/cairo-image-compositor.c
index 990226a0..6b95840e 100644
--- a/src/cairo-image-compositor.c
+++ b/src/cairo-image-compositor.c
@@ -480,6 +480,7 @@ composite_boxes (void *_dst,
pixman_image_t *dst = to_pixman_image (_dst);
pixman_image_t *src = ((cairo_image_source_t *)abstract_src)->pixman_image;
pixman_image_t *mask = abstract_mask ? ((cairo_image_source_t *)abstract_mask)->pixman_image : NULL;
+ pixman_image_t *free_src = NULL;
struct _cairo_boxes_chunk *chunk;
int i;
@@ -496,7 +497,7 @@ composite_boxes (void *_dst,
#if PIXMAN_HAS_OP_LERP
op = PIXMAN_OP_LERP_CLEAR;
#else
- src = _pixman_image_for_color (CAIRO_COLOR_WHITE);
+ free_src = src = _pixman_image_for_color (CAIRO_COLOR_WHITE);
op = PIXMAN_OP_OUT_REVERSE;
#endif
} else if (op == CAIRO_OPERATOR_SOURCE) {
@@ -527,6 +528,9 @@ composite_boxes (void *_dst,
}
}
+ if (free_src)
+ pixman_image_unref (free_src);
+
return CAIRO_STATUS_SUCCESS;
}