From 955d177dd6185dc1a10d86bd123bbbbb51ecf86e Mon Sep 17 00:00:00 2001 From: Thibault Saunier Date: Fri, 12 Jul 2019 16:15:35 -0400 Subject: [PATCH] formatter: Plug lists of TimedValue leak --- ges/ges-base-xml-formatter.c | 2 ++ ges/ges-xml-formatter.c | 3 ++- tests/check/ges/project.c | 15 ++++++++------- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/ges/ges-base-xml-formatter.c b/ges/ges-base-xml-formatter.c index 42ed146..5081b88 100644 --- a/ges/ges-base-xml-formatter.c +++ b/ges/ges-base-xml-formatter.c @@ -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"); } diff --git a/ges/ges-xml-formatter.c b/ges/ges-xml-formatter.c index 4eee805..d3025df 100644 --- a/ges/ges-xml-formatter.c +++ b/ges/ges-xml-formatter.c @@ -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]"); diff --git a/tests/check/ges/project.c b/tests/check/ges/project.c index 44b26bc..3c544df 100644 --- a/tests/check/ges/project.c +++ b/tests/check/ges/project.c @@ -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)) { -- 2.7.4