cogl: Use autopointers to free structs on return

This is a potential leak discovered by static analysis, in fact if
_COGL_GET_CONTEXT returns, the newly allocated struct isn't released.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/1195

(cherry picked from commit 645d596f9d)
This commit is contained in:
Marco Trevisan (Treviño) 2019-07-09 11:13:09 +02:00 committed by Robert Mader
parent 52a6b5df5f
commit 143771441f
3 changed files with 7 additions and 5 deletions

View File

@ -74,7 +74,7 @@ PangoFontMap *
cogl_pango_font_map_new (void) cogl_pango_font_map_new (void)
{ {
PangoFontMap *fm = pango_cairo_font_map_new (); PangoFontMap *fm = pango_cairo_font_map_new ();
CoglPangoFontMapPriv *priv = g_new0 (CoglPangoFontMapPriv, 1); g_autofree CoglPangoFontMapPriv *priv = g_new0 (CoglPangoFontMapPriv, 1);
_COGL_GET_CONTEXT (context, NULL); _COGL_GET_CONTEXT (context, NULL);
@ -85,7 +85,7 @@ cogl_pango_font_map_new (void)
* for now. */ * for now. */
g_object_set_qdata_full (G_OBJECT (fm), g_object_set_qdata_full (G_OBJECT (fm),
cogl_pango_font_map_get_priv_key (), cogl_pango_font_map_get_priv_key (),
priv, g_steal_pointer (&priv),
free_priv); free_priv);
return fm; return fm;

View File

@ -93,10 +93,12 @@ _cogl_onscreen_init_from_template (CoglOnscreen *onscreen,
CoglOnscreen * CoglOnscreen *
_cogl_onscreen_new (void) _cogl_onscreen_new (void)
{ {
CoglOnscreen *onscreen = g_new0 (CoglOnscreen, 1); g_autofree CoglOnscreen *onscreen_ptr = g_new0 (CoglOnscreen, 1);
CoglOnscreen *onscreen;
_COGL_GET_CONTEXT (ctx, NULL); _COGL_GET_CONTEXT (ctx, NULL);
onscreen = g_steal_pointer (&onscreen_ptr);
_cogl_framebuffer_init (COGL_FRAMEBUFFER (onscreen), _cogl_framebuffer_init (COGL_FRAMEBUFFER (onscreen),
ctx, ctx,
COGL_FRAMEBUFFER_TYPE_ONSCREEN, COGL_FRAMEBUFFER_TYPE_ONSCREEN,

View File

@ -50,7 +50,7 @@ struct _CoglPipelineCache
CoglPipelineCache * CoglPipelineCache *
_cogl_pipeline_cache_new (void) _cogl_pipeline_cache_new (void)
{ {
CoglPipelineCache *cache = g_new (CoglPipelineCache, 1); g_autofree CoglPipelineCache *cache = g_new (CoglPipelineCache, 1);
unsigned long vertex_state; unsigned long vertex_state;
unsigned long layer_vertex_state; unsigned long layer_vertex_state;
unsigned int fragment_state; unsigned int fragment_state;
@ -80,7 +80,7 @@ _cogl_pipeline_cache_new (void)
layer_vertex_state | layer_fragment_state, layer_vertex_state | layer_fragment_state,
"programs"); "programs");
return cache; return g_steal_pointer (&cache);
} }
void void