[lasem] cairo: avoid surface leak.



commit db2d9dd386d770279b4bd93653c2eec6ebbda9f6
Author: Emmanuel Pacaud <emmanuel gnome org>
Date:   Thu Oct 11 23:11:24 2012 +0200

    cairo: avoid surface leak.

 src/lsmcairo.c |   10 ++++++++--
 1 files changed, 8 insertions(+), 2 deletions(-)
---
diff --git a/src/lsmcairo.c b/src/lsmcairo.c
index 919546f..1a7e9bb 100644
--- a/src/lsmcairo.c
+++ b/src/lsmcairo.c
@@ -40,11 +40,16 @@ struct _LsmFilterSurface {
 LsmFilterSurface *
 lsm_filter_surface_new (const char *name, unsigned int x0, unsigned int y0, unsigned int x1, unsigned int y1)
 {
+	LsmFilterSurface *filter_surface;
 	cairo_surface_t *surface;
 
 	surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, x1 - x0, y1 - y0);
 
-	return lsm_filter_surface_new_with_content (name, x0, y0, surface);
+	filter_surface = lsm_filter_surface_new_with_content (name, x0, y0, surface);
+
+	cairo_surface_destroy (surface);
+
+	return filter_surface;
 }
 
 LsmFilterSurface *
@@ -89,7 +94,7 @@ lsm_filter_surface_get_name (LsmFilterSurface *surface)
 cairo_surface_t *
 lsm_filter_surface_get_cairo_surface (LsmFilterSurface *surface)
 {
-	g_return_if_fail (surface != NULL);
+	g_return_val_if_fail (surface != NULL, NULL);
 
 	return surface->surface;
 }
@@ -108,6 +113,7 @@ void
 lsm_filter_surface_unref (LsmFilterSurface *filter_surface)
 {
 	g_return_if_fail (filter_surface != NULL);
+	g_return_if_fail (filter_surface->ref_count > 0);
 
 	if (g_atomic_int_dec_and_test (&filter_surface->ref_count)) {
 		cairo_surface_destroy (filter_surface->surface);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]