rtpssrcdemux: refactor destruction of GstRtpSsrcDemuxPads
authorHavard Graff <havard@pexip.com>
Fri, 21 May 2021 16:45:17 +0000 (18:45 +0200)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Tue, 25 May 2021 22:04:41 +0000 (22:04 +0000)
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/992>

gst/rtpmanager/gstrtpssrcdemux.c

index 21663cb..7b8d096 100644 (file)
@@ -516,21 +516,22 @@ gst_rtp_ssrc_demux_init (GstRtpSsrcDemux * demux)
 }
 
 static void
-gst_rtp_ssrc_demux_reset (GstRtpSsrcDemux * demux)
+gst_rtp_ssrc_demux_pads_free (GstRtpSsrcDemuxPads * dpads)
 {
-  GSList *walk;
+  gst_pad_set_active (dpads->rtp_pad, FALSE);
+  gst_pad_set_active (dpads->rtcp_pad, FALSE);
 
-  for (walk = demux->srcpads; walk; walk = g_slist_next (walk)) {
-    GstRtpSsrcDemuxPads *dpads = (GstRtpSsrcDemuxPads *) walk->data;
+  gst_element_remove_pad (GST_PAD_PARENT (dpads->rtp_pad), dpads->rtp_pad);
+  gst_element_remove_pad (GST_PAD_PARENT (dpads->rtcp_pad), dpads->rtcp_pad);
 
-    gst_pad_set_active (dpads->rtp_pad, FALSE);
-    gst_pad_set_active (dpads->rtcp_pad, FALSE);
+  g_free (dpads);
+}
 
-    gst_element_remove_pad (GST_ELEMENT_CAST (demux), dpads->rtp_pad);
-    gst_element_remove_pad (GST_ELEMENT_CAST (demux), dpads->rtcp_pad);
-    g_free (dpads);
-  }
-  g_slist_free (demux->srcpads);
+static void
+gst_rtp_ssrc_demux_reset (GstRtpSsrcDemux * demux)
+{
+  g_slist_free_full (demux->srcpads,
+      (GDestroyNotify) gst_rtp_ssrc_demux_pads_free);
   demux->srcpads = NULL;
 }
 
@@ -574,17 +575,11 @@ gst_rtp_ssrc_demux_clear_ssrc (GstRtpSsrcDemux * demux, guint32 ssrc)
   demux->srcpads = g_slist_remove (demux->srcpads, dpads);
   GST_OBJECT_UNLOCK (demux);
 
-  gst_pad_set_active (dpads->rtp_pad, FALSE);
-  gst_pad_set_active (dpads->rtcp_pad, FALSE);
-
   g_signal_emit (G_OBJECT (demux),
       gst_rtp_ssrc_demux_signals[SIGNAL_REMOVED_SSRC_PAD], 0, ssrc,
       dpads->rtp_pad);
 
-  gst_element_remove_pad (GST_ELEMENT_CAST (demux), dpads->rtp_pad);
-  gst_element_remove_pad (GST_ELEMENT_CAST (demux), dpads->rtcp_pad);
-
-  g_free (dpads);
+  gst_rtp_ssrc_demux_pads_free (dpads);
 
   return;