plugins/elements/gstmultiqueue.c: Don't deadlock when releasing a pad - gst_pad_set_active may try and take the multi...

Original commit message from CVS:
* plugins/elements/gstmultiqueue.c: (gst_multi_queue_release_pad):
Don't deadlock when releasing a pad - gst_pad_set_active may try
and take the multiqueue lock too.
This commit is contained in:
Jan Schmidt 2007-04-13 11:20:48 +00:00
parent e28b310a73
commit 60f4a78b3d
2 changed files with 13 additions and 3 deletions

View file

@ -1,3 +1,9 @@
2007-04-13 Jan Schmidt <thaytan@mad.scientist.com>
* plugins/elements/gstmultiqueue.c: (gst_multi_queue_release_pad):
Don't deadlock when releasing a pad - gst_pad_set_active may try
and take the multiqueue lock too.
2007-04-12 Tim-Philipp Müller <tim at centricular dot net>
* gst/gsterror.c: (_gst_core_errors_init):

View file

@ -399,12 +399,19 @@ gst_multi_queue_release_pad (GstElement * element, GstPad * pad)
if (!tmp) {
GST_WARNING_OBJECT (mqueue, "That pad doesn't belong to this element ???");
GST_MULTI_QUEUE_MUTEX_UNLOCK (mqueue);
return;
}
/* FIXME: The removal of the singlequeue should probably not happen until it
* finishes draining */
/* remove it from the list */
mqueue->queues = g_list_delete_link (mqueue->queues, tmp);
/* FIXME : recompute next-non-linked */
GST_MULTI_QUEUE_MUTEX_UNLOCK (mqueue);
/* delete SingleQueue */
gst_data_queue_set_flushing (sq->queue, TRUE);
@ -413,9 +420,6 @@ gst_multi_queue_release_pad (GstElement * element, GstPad * pad)
gst_element_remove_pad (element, sq->srcpad);
gst_element_remove_pad (element, sq->sinkpad);
gst_single_queue_free (sq);
/* FIXME : recompute next-non-linked */
GST_MULTI_QUEUE_MUTEX_UNLOCK (mqueue);
}
static gboolean