summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgnacio Casal Quinteiro <icq@gnome.org>2016-02-04 11:16:45 +0100
committerIgnacio Casal Quinteiro <icq@gnome.org>2016-02-04 11:16:45 +0100
commit74442a0b8c59adf110b9072ac50955f45f59130c (patch)
tree38f990dfa1e6b1ca629d9641b7e11d14444b2a13
parentdc97bb9b9b0ee0e0566d6a9752e06694f8e4985b (diff)
downloadglib-74442a0b8c59adf110b9072ac50955f45f59130c.tar.gz
registrybackend: do not leak self if there are no items
-rw-r--r--gio/gregistrysettingsbackend.c13
1 files changed, 5 insertions, 8 deletions
diff --git a/gio/gregistrysettingsbackend.c b/gio/gregistrysettingsbackend.c
index f4314ecc2..a4ddfbff2 100644
--- a/gio/gregistrysettingsbackend.c
+++ b/gio/gregistrysettingsbackend.c
@@ -1732,10 +1732,8 @@ watch_thread_function (LPVOID parameter)
* likely to block (only when changing notification subscriptions).
*/
event = g_slice_new (RegistryEvent);
-
- event->self = G_REGISTRY_BACKEND (self->owner);
- g_object_ref (self->owner);
-
+ event->self = g_object_ref (self->owner);
+ event->prefix = g_strdup (prefix);
event->items = g_ptr_array_new_with_free_func (g_free);
EnterCriticalSection (G_REGISTRY_BACKEND (self->owner)->cache_lock);
@@ -1744,12 +1742,11 @@ watch_thread_function (LPVOID parameter)
LeaveCriticalSection (G_REGISTRY_BACKEND (self->owner)->cache_lock);
if (event->items->len > 0)
- {
- event->prefix = g_strdup (prefix);
- g_idle_add ((GSourceFunc) watch_handler, event);
- }
+ g_idle_add ((GSourceFunc) watch_handler, event);
else
{
+ g_object_unref (event->self);
+ g_free (event->prefix);
g_ptr_array_free (event->items, TRUE);
g_slice_free (RegistryEvent, event);
}