summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--gst/rtpmanager/gstrtpbin.c15
-rw-r--r--gst/rtpmanager/gstrtpsession.c9
3 files changed, 30 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index de536dc4..e4645c44 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2008-04-10 Peter Kjellerstedt <pkj@axis.com>
+
+ * gst/rtpmanager/gstrtpbin.c: (free_session):
+ * gst/rtpmanager/gstrtpsession.c: (gst_rtp_session_finalize):
+ Avoid leaking pads in the RTP manager.
+
2008-04-09 Jan Schmidt <Jan.Schmidt@sun.com>
* gst/nsf/nes_apu.c: (apu_process):
diff --git a/gst/rtpmanager/gstrtpbin.c b/gst/rtpmanager/gstrtpbin.c
index 4f580f48..5f781d8c 100644
--- a/gst/rtpmanager/gstrtpbin.c
+++ b/gst/rtpmanager/gstrtpbin.c
@@ -524,6 +524,21 @@ free_session (GstRtpBinSession * sess)
gst_element_set_state (sess->session, GST_STATE_NULL);
gst_element_set_state (sess->demux, GST_STATE_NULL);
+ if (sess->recv_rtp_sink != NULL)
+ gst_element_release_request_pad (sess->session, sess->recv_rtp_sink);
+ if (sess->recv_rtp_src != NULL)
+ gst_object_unref (sess->recv_rtp_src);
+ if (sess->recv_rtcp_sink != NULL)
+ gst_element_release_request_pad (sess->session, sess->recv_rtcp_sink);
+ if (sess->sync_src != NULL)
+ gst_object_unref (sess->sync_src);
+ if (sess->send_rtp_sink != NULL)
+ gst_element_release_request_pad (sess->session, sess->send_rtp_sink);
+ if (sess->send_rtp_src != NULL)
+ gst_object_unref (sess->send_rtp_src);
+ if (sess->send_rtcp_src != NULL)
+ gst_element_release_request_pad (sess->session, sess->send_rtcp_src);
+
gst_bin_remove (GST_BIN_CAST (bin), sess->session);
gst_bin_remove (GST_BIN_CAST (bin), sess->demux);
diff --git a/gst/rtpmanager/gstrtpsession.c b/gst/rtpmanager/gstrtpsession.c
index 6de1d3f3..3f7053d7 100644
--- a/gst/rtpmanager/gstrtpsession.c
+++ b/gst/rtpmanager/gstrtpsession.c
@@ -705,6 +705,15 @@ gst_rtp_session_finalize (GObject * object)
rtpsession = GST_RTP_SESSION (object);
+ if (rtpsession->recv_rtp_sink != NULL)
+ gst_object_unref (rtpsession->recv_rtp_sink);
+ if (rtpsession->recv_rtcp_sink != NULL)
+ gst_object_unref (rtpsession->recv_rtcp_sink);
+ if (rtpsession->send_rtp_sink != NULL)
+ gst_object_unref (rtpsession->send_rtp_sink);
+ if (rtpsession->send_rtcp_src != NULL)
+ gst_object_unref (rtpsession->send_rtcp_src);
+
g_hash_table_destroy (rtpsession->priv->ptmap);
g_mutex_free (rtpsession->priv->lock);
g_object_unref (rtpsession->priv->session);