rtpsrc/sink: Use g_signal_connect_object()
authorSebastian Dröge <sebastian@centricular.com>
Tue, 7 Jul 2020 11:43:50 +0000 (14:43 +0300)
committerGStreamer Merge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Tue, 7 Jul 2020 12:42:36 +0000 (12:42 +0000)
rtpbin can still emit signals when it is being disposed, and while
rtpbin is inside rtpsrc/rtpsink it can still live longer.

So we either have disconnect all signals at some point, or let GObject
take care of that automatically.

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

gst/rtp/gstrtpsink.c
gst/rtp/gstrtpsrc.c

index fb344d2..49e357b 100644 (file)
@@ -589,12 +589,12 @@ gst_rtp_sink_init (GstRtpSink * self)
   gst_bin_add (GST_BIN (self), self->rtpbin);
 
   /* Add rtpbin callbacks to monitor the operation of rtpbin */
-  g_signal_connect (self->rtpbin, "element-added",
-      G_CALLBACK (gst_rtp_sink_rtpbin_element_added_cb), self);
-  g_signal_connect (self->rtpbin, "pad-added",
-      G_CALLBACK (gst_rtp_sink_rtpbin_pad_added_cb), self);
-  g_signal_connect (self->rtpbin, "pad-removed",
-      G_CALLBACK (gst_rtp_sink_rtpbin_pad_removed_cb), self);
+  g_signal_connect_object (self->rtpbin, "element-added",
+      G_CALLBACK (gst_rtp_sink_rtpbin_element_added_cb), self, 0);
+  g_signal_connect_object (self->rtpbin, "pad-added",
+      G_CALLBACK (gst_rtp_sink_rtpbin_pad_added_cb), self, 0);
+  g_signal_connect_object (self->rtpbin, "pad-removed",
+      G_CALLBACK (gst_rtp_sink_rtpbin_pad_removed_cb), self, 0);
 
   GST_OBJECT_FLAG_SET (GST_OBJECT (self), GST_ELEMENT_FLAG_SINK);
   gst_bin_set_suppressed_flags (GST_BIN (self),
index a46170f..aa83c50 100644 (file)
@@ -705,16 +705,16 @@ gst_rtp_src_init (GstRtpSrc * self)
   gst_bin_add (GST_BIN (self), self->rtpbin);
 
   /* Add rtpbin callbacks to monitor the operation of rtpbin */
-  g_signal_connect (self->rtpbin, "pad-added",
-      G_CALLBACK (gst_rtp_src_rtpbin_pad_added_cb), self);
-  g_signal_connect (self->rtpbin, "pad-removed",
-      G_CALLBACK (gst_rtp_src_rtpbin_pad_removed_cb), self);
-  g_signal_connect (self->rtpbin, "request-pt-map",
-      G_CALLBACK (gst_rtp_src_rtpbin_request_pt_map_cb), self);
-  g_signal_connect (self->rtpbin, "on-new-ssrc",
-      G_CALLBACK (gst_rtp_src_rtpbin_on_new_ssrc_cb), self);
-  g_signal_connect (self->rtpbin, "on-ssrc-collision",
-      G_CALLBACK (gst_rtp_src_rtpbin_on_ssrc_collision_cb), self);
+  g_signal_connect_object (self->rtpbin, "pad-added",
+      G_CALLBACK (gst_rtp_src_rtpbin_pad_added_cb), self, 0);
+  g_signal_connect_object (self->rtpbin, "pad-removed",
+      G_CALLBACK (gst_rtp_src_rtpbin_pad_removed_cb), self, 0);
+  g_signal_connect_object (self->rtpbin, "request-pt-map",
+      G_CALLBACK (gst_rtp_src_rtpbin_request_pt_map_cb), self, 0);
+  g_signal_connect_object (self->rtpbin, "on-new-ssrc",
+      G_CALLBACK (gst_rtp_src_rtpbin_on_new_ssrc_cb), self, 0);
+  g_signal_connect_object (self->rtpbin, "on-ssrc-collision",
+      G_CALLBACK (gst_rtp_src_rtpbin_on_ssrc_collision_cb), self, 0);
 
   self->rtp_src = gst_element_factory_make ("udpsrc", "rtp_rtp_udpsrc0");
   if (self->rtp_src == NULL) {