[cairo] [patch] subsurface: fix memory leak

Henry (Yu) Song - SISA hsong at sisa.samsung.com
Thu Jun 14 14:28:09 PDT 2012

Hi, Chris

How about this

commit 43fef9e03a453eecaf6fd5a83674de8928fc0d73
Author: Henry Song <henry.song at samsung.com>
Date:   Thu Jun 14 14:24:35 2012 -0700

    gl: we do not set snapshot of a subsurface, this causes a memory leak.
    Instead, we roll our own dice

diff --git a/src/cairo-gl-operand.c b/src/cairo-gl-operand.c
index 4ef3307..d723e07 100644
--- a/src/cairo-gl-operand.c
+++ b/src/cairo-gl-operand.c
@@ -157,7 +157,9 @@ _cairo_gl_subsurface_clone_operand_init (cairo_gl_operand_t *operand,
 	    return status;
-	_cairo_surface_subsurface_set_snapshot (&sub->base, &surface->base);
+	if (sub->snapshot)
+	    cairo_surface_detach_snapshot (sub->snapshot);
+	sub->snapshot = cairo_surface_reference (&surface->base);
     status = _resolve_multisampling (surface);

From: Chris Wilson [chris at chris-wilson.co.uk]
Sent: Thursday, June 14, 2012 2:18 PM
To: Henry (Yu) Song - SISA; cairo at cairographics.org
Subject: RE: [cairo] [patch] subsurface: fix memory leak

On Thu, 14 Jun 2012 20:57:19 +0000, "Henry (Yu) Song - SISA" <hsong at sisa.samsung.com> wrote:
> Hi, Chris
> Better idea to break cyclic referencing?

As it stands, the only option is not to use the subsurface snapshot
cache. The challenge is to remove the requirement of surfaces having to
hold a reference to its snapshots. I think that could be done by moving
the reference into the callers as required.

Chris Wilson, Intel Open Source Technology Centre

More information about the cairo mailing list