mirror of
				https://gitlab.gnome.org/GNOME/glib.git
				synced 2025-11-03 17:48:56 +01:00 
			
		
		
		
	giomodule: Fix leaks in module loading
https://bugzilla.gnome.org/show_bug.cgi?id=711798
This commit is contained in:
		@@ -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);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user