From 22b7fae0368ba6cff23b2ebdf58bd7d1bfdfbd6f Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Thu, 31 Jan 2013 14:19:53 +0000 Subject: [PATCH] image: Add a reference for the clone's parent image We use the parent as a flag during map-to-image/umap-image that the resultant image came from a fallback rather than as direct call to the backend's map_to_image(). Whilst we use it as a simple flag, we need to make sure the parent surface obeys the reference counting semantics and is consistent for all callers. Unlike other users of the parent pointer, there is no resource sharing between the two surfaces. Reported-by: Henry Song Signed-off-by: Chris Wilson --- src/cairo-image-surface.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/cairo-image-surface.c b/src/cairo-image-surface.c index 3fe6e433a..20a1c03e3 100644 --- a/src/cairo-image-surface.c +++ b/src/cairo-image-surface.c @@ -1240,7 +1240,14 @@ _cairo_image_surface_clone_subimage (cairo_surface_t *surface, if (unlikely (status)) goto error; - _cairo_image_surface_set_parent (to_image_surface (image), surface); + /* We use the parent as a flag during map-to-image/umap-image that the + * resultant image came from a fallback rather than as direct call + * to the backend's map_to_image(). Whilst we use it as a simple flag, + * we need to make sure the parent surface obeys the reference counting + * semantics and is consistent for all callers. + */ + _cairo_image_surface_set_parent (to_image_surface (image), + cairo_surface_reference (surface)); return to_image_surface (image);