offscreen: Plug a leak in an error path

When creating a CoglOffscreen we take a reference on the texture handle,
but in case of error we never release it.

We should take that reference only on success.

http://bugzilla.clutter-project.org/show_bug.cgi?id=2620
This commit is contained in:
Emmanuele Bassi 2011-04-04 14:42:36 +01:00
parent bb79fb43e5
commit 12b622a320

View File

@ -862,7 +862,7 @@ _cogl_offscreen_new_to_texture_full (CoglHandle texhandle,
_cogl_texture_set_filters (texhandle, GL_NEAREST, GL_NEAREST); _cogl_texture_set_filters (texhandle, GL_NEAREST, GL_NEAREST);
offscreen = g_new0 (CoglOffscreen, 1); offscreen = g_new0 (CoglOffscreen, 1);
offscreen->texture = cogl_handle_ref (texhandle); offscreen->texture = texhandle;
if ((create_flags & COGL_OFFSCREEN_DISABLE_DEPTH_AND_STENCIL)) if ((create_flags & COGL_OFFSCREEN_DISABLE_DEPTH_AND_STENCIL))
fbo_created = try_creating_fbo (offscreen, 0, &data); fbo_created = try_creating_fbo (offscreen, 0, &data);
@ -898,8 +898,12 @@ _cogl_offscreen_new_to_texture_full (CoglHandle texhandle,
data.level_width, data.level_width,
data.level_height); data.level_height);
/* take a reference on the texture */
cogl_handle_ref (offscreen->texture);
ret = _cogl_offscreen_object_new (offscreen); ret = _cogl_offscreen_object_new (offscreen);
_cogl_texture_associate_framebuffer (texhandle, COGL_FRAMEBUFFER (ret)); _cogl_texture_associate_framebuffer (texhandle, COGL_FRAMEBUFFER (ret));
return ret; return ret;
} }
else else
@ -907,6 +911,7 @@ _cogl_offscreen_new_to_texture_full (CoglHandle texhandle,
g_free (offscreen); g_free (offscreen);
/* XXX: This API should probably have been defined to take a GError */ /* XXX: This API should probably have been defined to take a GError */
g_warning ("%s: Failed to create an OpenGL framebuffer", G_STRLOC); g_warning ("%s: Failed to create an OpenGL framebuffer", G_STRLOC);
return COGL_INVALID_HANDLE; return COGL_INVALID_HANDLE;
} }
} }