Commit a43de49d authored by Kouhei Sutou's avatar Kouhei Sutou Committed by Sebastian Dröge

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
parent 5de03542
......@@ -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)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment