multiqueue: Ensure peer pad exists when iterating internal links

The pads can be NULL when we're racing with pad removal, e.g. when the
pads get removed between `gst_pad_iterate_internal_links` acquiring the
parent element and `gst_multi_queue_iterate_internal_links` locking the
multiqueue.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/811>
This commit is contained in:
Jan Alexander Steffens (heftig) 2021-05-06 12:54:46 +02:00 committed by Tim-Philipp Müller
parent 0d1fad0e92
commit 1dcdde9fdf

View file

@ -1140,11 +1140,11 @@ gst_multi_queue_iterate_internal_links (GstPad * pad, GstObject * parent)
srcpad = g_weak_ref_get (&squeue->srcpad);
sinkpad = g_weak_ref_get (&squeue->sinkpad);
if (sinkpad == pad) {
if (sinkpad == pad && srcpad) {
opad = srcpad;
gst_clear_object (&sinkpad);
} else if (srcpad == pad) {
} else if (srcpad == pad && sinkpad) {
opad = sinkpad;
gst_clear_object (&srcpad);