bin: When copying the sort iterator, also copy its internal queue

Otherwise both iterators share the same references, the second one
usually resulting in a crash when being freed.

https://bugzilla.gnome.org/show_bug.cgi?id=771649
This commit is contained in:
Kouhei Sutou 2016-09-19 10:04:55 -04:00 committed by Sebastian Dröge
parent 5de03542ea
commit a43de49d52

View file

@ -2134,6 +2134,16 @@ typedef struct _GstBinSortIterator
gboolean dirty; /* we detected structure change */
} GstBinSortIterator;
static void
copy_to_queue (gpointer data, gpointer user_data)
{
GstElement *element = data;
GQueue *queue = user_data;
gst_object_ref (element);
g_queue_push_tail (queue, element);
}
static void
gst_bin_sort_iterator_copy (const GstBinSortIterator * it,
GstBinSortIterator * copy)
@ -2141,8 +2151,8 @@ gst_bin_sort_iterator_copy (const GstBinSortIterator * it,
GHashTableIter iter;
gpointer key, value;
copy->queue = it->queue;
g_queue_foreach (&copy->queue, (GFunc) gst_object_ref, NULL);
g_queue_init (&copy->queue);
g_queue_foreach (&it->queue, copy_to_queue, &copy->queue);
copy->bin = gst_object_ref (it->bin);
if (it->best)