clip: Avoid corruption of our list of children while ungrouping
authorThibault Saunier <thibault.saunier@collabora.com>
Sun, 5 May 2013 10:13:24 +0000 (11:13 +0100)
committerThibault Saunier <thibault.saunier@collabora.com>
Thu, 9 May 2013 23:12:43 +0000 (19:12 -0400)
ges/ges-clip.c

index eda1862..fa0d84e 100644 (file)
@@ -196,12 +196,12 @@ add_tlobj_to_list (gpointer key, gpointer tlobj, GList ** list)
 static GList *
 _ungroup (GESContainer * container, gboolean recursive)
 {
-  GList *tmp, *ret = NULL;
   GESClip *tmpclip;
   GESTrackType track_type;
   GESTrackElement *track_element;
 
   gboolean first_obj = TRUE;
+  GList *tmp, *children, *ret = NULL;
   GESClip *clip = GES_CLIP (container);
   GESTimelineElement *element = GES_TIMELINE_ELEMENT (container);
   GESLayer *layer = clip->priv->layer;
@@ -214,7 +214,8 @@ _ungroup (GESContainer * container, gboolean recursive)
   }
 
   /* We need a copy of the current list of tracks */
-  for (tmp = GES_CONTAINER_CHILDREN (container); tmp; tmp = tmp->next) {
+  children = ges_container_get_children (container);
+  for (tmp = children; tmp; tmp = tmp->next) {
     track_element = GES_TRACK_ELEMENT (tmp->data);
     track_type = ges_track_element_get_track_type (track_element);
 
@@ -247,6 +248,7 @@ _ungroup (GESContainer * container, gboolean recursive)
       gst_object_unref (track_element);
     }
   }
+  g_list_free_full (children, gst_object_unref);
   g_hash_table_foreach (_tracktype_clip, (GHFunc) add_tlobj_to_list, &ret);
   g_hash_table_unref (_tracktype_clip);