rtspsrc: Don't remove udpsrc/sink from rtspsrc if they were not added to it

This can happen in various error cases that could happen between the
creation of the element in question and the adding to the rtspsrc.

It causes an ugly critical warning right now but is otherwise harmless.
This commit is contained in:
Sebastian Dröge 2019-03-15 09:18:00 +01:00 committed by Sebastian Dröge
parent 2513edf229
commit a676c17259

View file

@ -2281,6 +2281,8 @@ gst_rtspsrc_stream_free (GstRTSPSrc * src, GstRTSPStream * stream)
for (i = 0; i < 2; i++) { for (i = 0; i < 2; i++) {
if (stream->udpsrc[i]) { if (stream->udpsrc[i]) {
gst_element_set_state (stream->udpsrc[i], GST_STATE_NULL); gst_element_set_state (stream->udpsrc[i], GST_STATE_NULL);
if (gst_object_has_as_parent (GST_OBJECT (stream->udpsrc[i]),
GST_OBJECT (src)))
gst_bin_remove (GST_BIN_CAST (src), stream->udpsrc[i]); gst_bin_remove (GST_BIN_CAST (src), stream->udpsrc[i]);
gst_object_unref (stream->udpsrc[i]); gst_object_unref (stream->udpsrc[i]);
} }
@ -2289,6 +2291,8 @@ gst_rtspsrc_stream_free (GstRTSPSrc * src, GstRTSPStream * stream)
if (stream->udpsink[i]) { if (stream->udpsink[i]) {
gst_element_set_state (stream->udpsink[i], GST_STATE_NULL); gst_element_set_state (stream->udpsink[i], GST_STATE_NULL);
if (gst_object_has_as_parent (GST_OBJECT (stream->udpsink[i]),
GST_OBJECT (src)))
gst_bin_remove (GST_BIN_CAST (src), stream->udpsink[i]); gst_bin_remove (GST_BIN_CAST (src), stream->udpsink[i]);
gst_object_unref (stream->udpsink[i]); gst_object_unref (stream->udpsink[i]);
} }