formatter: Plug lists of TimedValue leak
authorThibault Saunier <tsaunier@igalia.com>
Fri, 12 Jul 2019 20:15:35 +0000 (16:15 -0400)
committerThibault Saunier <tsaunier@igalia.com>
Fri, 26 Jul 2019 17:48:52 +0000 (13:48 -0400)
ges/ges-base-xml-formatter.c
ges/ges-xml-formatter.c
tests/check/ges/project.c

index 42ed1464f0eda754f32c8b9047c1e40f4e9aa76c..5081b88a3b40812e3f1a70e6ef632609737ccb60 100644 (file)
@@ -1048,6 +1048,7 @@ ges_base_xml_formatter_add_control_binding (GESBaseXmlFormatter * self,
   if (priv->state != STATE_LOADING_CLIPS) {
     GST_DEBUG_OBJECT (self, "Not loading control bindings in %s state.",
         loading_state_name (priv->state));
+    g_slist_free_full (timed_values, g_free);
     return;
   }
 
@@ -1072,6 +1073,7 @@ ges_base_xml_formatter_add_control_binding (GESBaseXmlFormatter * self,
 
     gst_timed_value_control_source_set_from_list (GST_TIMED_VALUE_CONTROL_SOURCE
         (source), timed_values);
+    g_slist_free_full (timed_values, g_free);
   } else
     GST_WARNING ("This interpolation type is not supported\n");
 }
index 4eee8052acc0edcbd6a3ac300e6563c4771715e9..d3025df8b05a78db979710676b82727acb11091f 100644 (file)
@@ -675,7 +675,7 @@ _parse_binding (GMarkupParseContext * context, const gchar * element_name,
     if (strlen (pair)) {
       GstTimedValue *value;
 
-      value = g_slice_new (GstTimedValue);
+      value = g_new0 (GstTimedValue, 1);
       value_pair = g_strsplit (pair, ":", 0);
       value->timestamp = g_ascii_strtoull (value_pair[0], NULL, 10);
       value->value = g_ascii_strtod (value_pair[1], NULL);
@@ -1425,6 +1425,7 @@ _save_keyframes (GString * str, GESTrackElement * trackelement, gint index,
                   ":%s ", value->timestamp, g_ascii_dtostr (strbuf,
                       G_ASCII_DTOSTR_BUF_SIZE, value->value)), depth);
         }
+        g_list_free (timed_values);
         append_escaped (str, g_markup_printf_escaped ("'/>\n"), depth);
       } else
         GST_DEBUG ("control source not in [interpolation]");
index 44b26bc2212e7a4aadcdebd1b9f2fe9900492613..3c544df158e8d0a3170b8735f7b0c40d3b650a6b 100644 (file)
@@ -386,7 +386,7 @@ _check_properties (GESTimeline * timeline)
           if (GES_IS_EFFECT (element)) {
             GstControlBinding *binding;
             GstControlSource *source;
-            GList *timed_values;
+            GList *timed_values, *tmpvalue;
             GstTimedValue *value;
 
             binding =
@@ -397,20 +397,21 @@ _check_properties (GESTimeline * timeline)
             fail_unless (source != NULL);
 
             /* Now check keyframe position */
-            timed_values =
+            tmpvalue = timed_values =
                 gst_timed_value_control_source_get_all
                 (GST_TIMED_VALUE_CONTROL_SOURCE (source));
-            value = timed_values->data;
+            value = tmpvalue->data;
             fail_unless (value->value == 0.);
             fail_unless (value->timestamp == 0 * GST_SECOND);
-            timed_values = timed_values->next;
-            value = timed_values->data;
+            tmpvalue = tmpvalue->next;
+            value = tmpvalue->data;
             fail_unless (value->value == 0.);
             fail_unless (value->timestamp == 5 * GST_SECOND);
-            timed_values = timed_values->next;
-            value = timed_values->data;
+            tmpvalue = tmpvalue->next;
+            value = tmpvalue->data;
             fail_unless (value->value == 1.);
             fail_unless (value->timestamp == 10 * GST_SECOND);
+            g_list_free (timed_values);
           }
           /* Checking children properties */
           else if (GES_IS_VIDEO_SOURCE (element)) {