mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-24 17:20:36 +00:00
rtpbin: Free session if request pads are released
Free the session when all the request pads are released. Don't mess with the session list in free_session as it is called from a foreach on that list. Set the state of the upstream element to NULL first. See #561752
This commit is contained in:
parent
4424fd3c93
commit
fb59348dbe
1 changed files with 8 additions and 3 deletions
|
@ -554,8 +554,8 @@ free_session (GstRtpBinSession * sess)
|
|||
|
||||
GST_DEBUG_OBJECT (bin, "freeing session %p", sess);
|
||||
|
||||
gst_element_set_state (sess->session, GST_STATE_NULL);
|
||||
gst_element_set_state (sess->demux, GST_STATE_NULL);
|
||||
gst_element_set_state (sess->session, GST_STATE_NULL);
|
||||
|
||||
if (sess->recv_rtp_sink != NULL) {
|
||||
gst_element_release_request_pad (sess->session, sess->recv_rtp_sink);
|
||||
|
@ -589,8 +589,6 @@ free_session (GstRtpBinSession * sess)
|
|||
g_mutex_free (sess->lock);
|
||||
g_hash_table_destroy (sess->ptmap);
|
||||
|
||||
bin->sessions = g_slist_remove (bin->sessions, sess);
|
||||
|
||||
g_free (sess);
|
||||
}
|
||||
|
||||
|
@ -2512,6 +2510,13 @@ gst_rtp_bin_release_pad (GstElement * element, GstPad * pad)
|
|||
} else if (session->send_rtcp_src == target) {
|
||||
remove_rtcp (rtpbin, session, pad);
|
||||
}
|
||||
|
||||
/* no more request pads, free the complete session */
|
||||
if (session->recv_rtp_sink == NULL && session->recv_rtcp_sink == NULL &&
|
||||
session->send_rtp_sink == NULL && session->send_rtcp_src == NULL) {
|
||||
rtpbin->sessions = g_slist_remove (rtpbin->sessions, session);
|
||||
free_session (session);
|
||||
}
|
||||
GST_RTP_BIN_UNLOCK (rtpbin);
|
||||
|
||||
gst_object_unref (target);
|
||||
|
|
Loading…
Reference in a new issue