asset: Avoid leaking the GParameter array and content
authorThibault Saunier <thibault.saunier@collabora.com>
Sat, 29 Dec 2012 20:52:42 +0000 (17:52 -0300)
committerThibault Saunier <thibault.saunier@collabora.com>
Sat, 29 Dec 2012 22:38:50 +0000 (19:38 -0300)
ges/ges-asset.c
ges/ges-custom-timeline-source.c
ges/ges-timeline-file-source.c
ges/ges-timeline-standard-transition.c
ges/ges-track-parse-launch-effect.c

index cb417df..7f5a3e4 100644 (file)
@@ -275,11 +275,19 @@ ges_asset_extract_default (GESAsset * asset, GError ** error)
   guint n_params;
   GParameter *params;
   GESAssetPrivate *priv = asset->priv;
+  GESExtractable *n_extractable;
 
   params = ges_extractable_type_get_parameters_from_id (priv->extractable_type,
       priv->id, &n_params);
 
-  return g_object_newv (priv->extractable_type, n_params, params);
+  n_extractable = g_object_newv (priv->extractable_type, n_params, params);
+
+  while (n_params--)
+    g_value_unset (&params[n_params].value);
+  if (params)
+    g_free (params);
+
+  return n_extractable;
 }
 
 static gboolean
index 22a96b5..4d2ad60 100644 (file)
@@ -71,17 +71,17 @@ extractable_get_parameters_from_id (const gchar * id, guint * n_params)
   /* We already know that we have a valid ID here */
   func_udata = g_strsplit (id, "!", -1);
 
-  params[0].name = g_strdup ("fill-func");
+  params[0].name = "fill-func";
   g_value_init (&params[0].value, G_TYPE_POINTER);
   g_value_set_pointer (&params[0].value,
       GUINT_TO_POINTER (g_ascii_strtoll (func_udata[0], NULL, 10)));
 
-  params[1].name = g_strdup ("user-data");
+  params[1].name = "user-data";
   g_value_init (&params[1].value, G_TYPE_POINTER);
   g_value_set_pointer (&params[1].value,
       GUINT_TO_POINTER (g_ascii_strtoll (func_udata[1], NULL, 10)));
 
-  params[2].name = g_strdup ("supported-formats");
+  params[2].name = "supported-formats";
   g_value_init (&params[2].value, G_TYPE_ENUM);
   g_value_set_enum (&params[2].value, GES_TRACK_TYPE_CUSTOM);
 
index ca8272a..147c089 100644 (file)
@@ -208,7 +208,7 @@ extractable_get_parameters_from_id (const gchar * id, guint * n_params)
 {
   GParameter *params = g_new0 (GParameter, 2);
 
-  params[0].name = g_strdup ("uri");
+  params[0].name = "uri";
   g_value_init (&params[0].value, G_TYPE_STRING);
   g_value_set_string (&params[0].value, id);
 
index 69e6b99..44f7c54 100644 (file)
@@ -118,7 +118,7 @@ extractable_get_parameters_from_id (const gchar * id, guint * n_params)
   GParameter *params = g_new0 (GParameter, 1);
   GEnumValue *value = g_enum_get_value_by_nick (enum_class, id);
 
-  params[0].name = g_strdup ("vtype");
+  params[0].name = "vtype";
   g_value_init (&params[0].value, GES_VIDEO_STANDARD_TRANSITION_TYPE_TYPE);
   g_value_set_enum (&params[0].value, value->value);
   *n_params = 1;
index 9be8634..ab3a93a 100644 (file)
@@ -69,7 +69,7 @@ extractable_get_parameters_from_id (const gchar * id, guint * n_params)
 {
   GParameter *params = g_new0 (GParameter, 2);
 
-  params[0].name = g_strdup ("bin-description");
+  params[0].name = "bin-description";
   g_value_init (&params[0].value, G_TYPE_STRING);
   g_value_set_string (&params[0].value, id);