From: Stef Walter Date: Thu, 7 Nov 2013 22:00:28 +0000 (+0100) Subject: giomodule: Fix leaks in module loading X-Git-Tag: 2.39.1~35 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=dc72039c162e1ca6400f28f92dd8e090ce99bd3f;p=platform%2Fupstream%2Fglib.git giomodule: Fix leaks in module loading https://bugzilla.gnome.org/show_bug.cgi?id=711798 --- diff --git a/gio/giomodule.c b/gio/giomodule.c index 17d55de..6297f22 100644 --- a/gio/giomodule.c +++ b/gio/giomodule.c @@ -489,7 +489,7 @@ g_io_modules_scan_all_in_directory_with_scope (const char *dirname, g_io_extension_point_register (extension_points[i]); extension_point->lazy_load_modules = g_list_prepend (extension_point->lazy_load_modules, - module); + g_object_ref (module)); } } else @@ -497,15 +497,11 @@ g_io_modules_scan_all_in_directory_with_scope (const char *dirname, /* Try to load and init types */ if (g_type_module_use (G_TYPE_MODULE (module))) g_type_module_unuse (G_TYPE_MODULE (module)); /* Unload */ - else - { /* Failure to load */ - g_printerr ("Failed to load module: %s\n", path); - g_object_unref (module); - g_free (path); - continue; - } + else /* Failure to load */ + g_printerr ("Failed to load module: %s\n", path); } + g_object_unref (module); g_free (path); } } @@ -865,8 +861,7 @@ _g_io_module_get_default (const gchar *extension_point, done: g_hash_table_insert (default_modules, - g_strdup (extension_point), - impl ? g_object_ref (impl) : NULL); + g_strdup (extension_point), impl); g_rec_mutex_unlock (&default_modules_lock); return impl; @@ -1098,7 +1093,20 @@ _g_io_modules_ensure_loaded (void) static void g_io_extension_point_free (GIOExtensionPoint *ep) { + GList *walk; + g_free (ep->name); + + for (walk = ep->extensions; walk != NULL; walk = walk->next) + { + GIOExtension *extension = walk->data; + + g_free (extension->name); + g_slice_free (GIOExtension, extension); + } + g_list_free_full (ep->lazy_load_modules, g_object_unref); + g_list_free (ep->extensions); + g_free (ep); }