sctp: Fix race of pad removal during reset/stop
authorDoug Nazar <nazard@nazar.ca>
Mon, 17 May 2021 13:13:28 +0000 (09:13 -0400)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Wed, 19 May 2021 05:49:48 +0000 (05:49 +0000)
Both reset & stop remove existing pads. Can result in warning from
gst_element_remove_pad().

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2256>

ext/sctp/gstsctpdec.c

index e3f1a08..097b629 100644 (file)
@@ -606,8 +606,11 @@ static void
 remove_pad (GstSctpDec * self, GstPad * pad)
 {
   stop_srcpad_task (pad);
+  GST_PAD_STREAM_LOCK (pad);
   gst_pad_set_active (pad, FALSE);
-  gst_element_remove_pad (GST_ELEMENT (self), pad);
+  if (gst_object_has_as_parent (GST_OBJECT (pad), GST_OBJECT (self)))
+    gst_element_remove_pad (GST_ELEMENT (self), pad);
+  GST_PAD_STREAM_UNLOCK (pad);
   GST_OBJECT_LOCK (self);
   gst_flow_combiner_remove_pad (self->flow_combiner, pad);
   GST_OBJECT_UNLOCK (self);