summaryrefslogtreecommitdiff
path: root/fb
diff options
context:
space:
mode:
authorArcady Goldmints-Orlov <arcadyg@nvidia.com>2012-10-04 14:22:13 -0700
committerAdam Jackson <ajax@redhat.com>2015-09-29 12:21:34 -0400
commitfbac451724f7e1b8ce6b6e0505cc33ccd41c5158 (patch)
treedc7c63f0302dd0c3f7d262a49437524e1269d08c /fb
parent19a87257f92e7f57a167fc03fba014ee22d8e1ab (diff)
Fix alphamap interactions with wfb
Set a destructor function on pixman images and call fbFinishAccess() from there, rather than directly from free_pixman_pict(). This ensures that fbFinishAccess() gets called even if pixman still has a reference to the image after free_pixman_pict(), as is the case for alphamaps. [ajax: Squash an unused variable warning in the non-wfb build] Reviewed-by: Aaron Plattner <aplattner@nvidia.com> Signed-off-by: Arcady Goldmints-Orlov <arcadyg@nvidia.com> Reviewed-by: Søren Sandmann <ssp@redhat.com>
Diffstat (limited to 'fb')
-rw-r--r--fb/fbpict.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/fb/fbpict.c b/fb/fbpict.c
index 021f17883..7ea0b668f 100644
--- a/fb/fbpict.c
+++ b/fb/fbpict.c
@@ -345,6 +345,11 @@ static pixman_image_t *image_from_pict_internal(PicturePtr pict, Bool has_clip,
int *xoff, int *yoff,
Bool is_alpha_map);
+static void image_destroy(pixman_image_t *image, void *data)
+{
+ fbFinishAccess((DrawablePtr)data);
+}
+
static void
set_image_properties(pixman_image_t * image, PicturePtr pict, Bool has_clip,
int *xoff, int *yoff, Bool is_alpha_map)
@@ -429,6 +434,10 @@ set_image_properties(pixman_image_t * image, PicturePtr pict, Bool has_clip,
break;
}
+ if (pict->pDrawable)
+ pixman_image_set_destroy_function(image, &image_destroy,
+ pict->pDrawable);
+
pixman_image_set_filter(image, filter,
(pixman_fixed_t *) pict->filter_params,
pict->filter_nparams);
@@ -481,8 +490,8 @@ image_from_pict(PicturePtr pict, Bool has_clip, int *xoff, int *yoff)
void
free_pixman_pict(PicturePtr pict, pixman_image_t * image)
{
- if (image && pixman_image_unref(image) && pict->pDrawable)
- fbFinishAccess(pict->pDrawable);
+ if (image)
+ pixman_image_unref(image);
}
Bool