mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-18 14:26:43 +00:00
rtpbin: fix some lock management
... to avoid trying to take a non-recursive lock twice.
This commit is contained in:
parent
4bbc2a7106
commit
a34cbc7637
1 changed files with 3 additions and 2 deletions
|
@ -632,6 +632,7 @@ no_demux:
|
|||
}
|
||||
}
|
||||
|
||||
/* called with RTP_BIN_LOCK */
|
||||
static void
|
||||
free_session (GstRtpBinSession * sess, GstRtpBin * bin)
|
||||
{
|
||||
|
@ -645,12 +646,10 @@ free_session (GstRtpBinSession * sess, GstRtpBin * bin)
|
|||
gst_element_set_state (sess->demux, GST_STATE_NULL);
|
||||
gst_element_set_state (sess->session, GST_STATE_NULL);
|
||||
|
||||
GST_RTP_BIN_LOCK (bin);
|
||||
remove_recv_rtp (bin, sess);
|
||||
remove_recv_rtcp (bin, sess);
|
||||
remove_send_rtp (bin, sess);
|
||||
remove_rtcp (bin, sess);
|
||||
GST_RTP_BIN_UNLOCK (bin);
|
||||
|
||||
gst_bin_remove (GST_BIN_CAST (bin), sess->session);
|
||||
gst_bin_remove (GST_BIN_CAST (bin), sess->demux);
|
||||
|
@ -1902,6 +1901,7 @@ gst_rtp_bin_dispose (GObject * object)
|
|||
|
||||
rtpbin = GST_RTP_BIN (object);
|
||||
|
||||
GST_RTP_BIN_LOCK (rtpbin);
|
||||
GST_DEBUG_OBJECT (object, "freeing sessions");
|
||||
g_slist_foreach (rtpbin->sessions, (GFunc) free_session, rtpbin);
|
||||
g_slist_free (rtpbin->sessions);
|
||||
|
@ -1910,6 +1910,7 @@ gst_rtp_bin_dispose (GObject * object)
|
|||
g_slist_foreach (rtpbin->clients, (GFunc) free_client, rtpbin);
|
||||
g_slist_free (rtpbin->clients);
|
||||
rtpbin->clients = NULL;
|
||||
GST_RTP_BIN_UNLOCK (rtpbin);
|
||||
|
||||
G_OBJECT_CLASS (parent_class)->dispose (object);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue