diff options
author | Ray Strode <rstrode@redhat.com> | 2013-03-24 23:53:15 -0400 |
---|---|---|
committer | Ray Strode <rstrode@redhat.com> | 2013-03-26 16:58:22 -0400 |
commit | 13c7020b80a103d6c4f213ed06d6eded2d30fbd5 (patch) | |
tree | 755db7d224e4bd18502da3e90381e14fd57c429f | |
parent | 5ed6e37e3c4c926039dc1ce0fc459e2aa2fd7036 (diff) | |
download | mutter-13c7020b80a103d6c4f213ed06d6eded2d30fbd5.tar.gz |
background: fix pixbuf leak in load_file_finish
g_task_propagate_pointer relinishes the GTask
of its reference to the propagated pointer, so we need to
unref it ourselves when we're done with it.
https://bugzilla.gnome.org/show_bug.cgi?id=696157
-rw-r--r-- | src/compositor/meta-background.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/compositor/meta-background.c b/src/compositor/meta-background.c index f75d881af..7d8f64c3e 100644 --- a/src/compositor/meta-background.c +++ b/src/compositor/meta-background.c @@ -1156,6 +1156,7 @@ meta_background_load_file_finish (MetaBackground *self, int width, height, row_stride; guchar *pixels; gboolean has_alpha; + gboolean loaded = FALSE; g_return_val_if_fail (g_task_is_valid (result, self), FALSE); @@ -1164,7 +1165,7 @@ meta_background_load_file_finish (MetaBackground *self, pixbuf = g_task_propagate_pointer (task, error); if (pixbuf == NULL) - return FALSE; + goto out; task_data = g_task_get_task_data (task); @@ -1190,7 +1191,7 @@ meta_background_load_file_finish (MetaBackground *self, COGL_BITMAP_ERROR, COGL_BITMAP_ERROR_FAILED, _("background texture could not be created from file")); - return FALSE; + goto out; } cogl_object_set_user_data (COGL_OBJECT (texture), @@ -1206,8 +1207,12 @@ meta_background_load_file_finish (MetaBackground *self, set_texture (self, texture); clutter_content_invalidate (CLUTTER_CONTENT (self)); + loaded = TRUE; - return TRUE; +out: + if (pixbuf != NULL) + g_object_unref (pixbuf); + return loaded; } /** |