rtpsink: Return proper pad from _request_new_pad
authorJan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>
Fri, 7 May 2021 09:13:46 +0000 (11:13 +0200)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Fri, 7 May 2021 12:07:05 +0000 (12:07 +0000)
Bizarrely, it returned a pad from the child rtpbin. I noticed because
our application leaked the implicitly created ghost pad. Make an
explicit ghost pad so this works properly.

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

gst/rtp/gstrtpsink.c

index 83739fb..4ef6ca7 100644 (file)
@@ -241,7 +241,7 @@ gst_rtp_sink_request_new_pad (GstElement * element,
     GstPadTemplate * templ, const gchar * name, const GstCaps * caps)
 {
   GstRtpSink *self = GST_RTP_SINK (element);
-  GstPad *pad = NULL;
+  GstPad *rpad, *pad = NULL;
 
   if (self->rtpbin == NULL) {
     GST_ELEMENT_ERROR (self, CORE, MISSING_PLUGIN, (NULL),
@@ -253,7 +253,12 @@ gst_rtp_sink_request_new_pad (GstElement * element,
     return NULL;
 
   GST_RTP_SINK_LOCK (self);
-  pad = gst_element_request_pad_simple (self->rtpbin, "send_rtp_sink_%u");
+  rpad = gst_element_request_pad_simple (self->rtpbin, "send_rtp_sink_%u");
+  if (rpad) {
+    pad = gst_ghost_pad_new (GST_PAD_NAME (rpad), rpad);
+    gst_element_add_pad (element, pad);
+    gst_clear_object (&rpad);
+  }
   GST_RTP_SINK_UNLOCK (self);
 
   g_return_val_if_fail (pad != NULL, NULL);