From 4b7bcc2ec18da09eadb10cde53b3bc8276db7a8f Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Mon, 26 Aug 2013 11:50:27 +0200 Subject: [PATCH] rtsession: fix locking We need to take the session lock when getting and manipulating the source. --- gst/rtpmanager/rtpsession.c | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/gst/rtpmanager/rtpsession.c b/gst/rtpmanager/rtpsession.c index 339ccfd5a8..3ed41168ce 100644 --- a/gst/rtpmanager/rtpsession.c +++ b/gst/rtpmanager/rtpsession.c @@ -3589,10 +3589,12 @@ gboolean rtp_session_request_key_unit (RTPSession * sess, guint32 ssrc, gboolean fir, gint count) { - RTPSource *src = find_source (sess, ssrc); + RTPSource *src; + RTP_SESSION_LOCK (sess); + src = find_source (sess, ssrc); if (!src) - return FALSE; + goto no_source; if (fir) { src->send_pli = FALSE; @@ -3604,10 +3606,18 @@ rtp_session_request_key_unit (RTPSession * sess, guint32 ssrc, } else if (!src->send_fir) { src->send_pli = TRUE; } + RTP_SESSION_UNLOCK (sess); rtp_session_send_rtcp (sess, 200 * GST_MSECOND); return TRUE; + + /* ERRORS */ +no_source: + { + RTP_SESSION_UNLOCK (sess); + return FALSE; + } } /** @@ -3625,15 +3635,25 @@ gboolean rtp_session_request_nack (RTPSession * sess, guint32 ssrc, guint16 seqnum, GstClockTime max_delay) { - RTPSource *source = find_source (sess, ssrc); + RTPSource *source; + RTP_SESSION_LOCK (sess); + source = find_source (sess, ssrc); if (source == NULL) - return FALSE; + goto no_source; GST_DEBUG ("request NACK for %08x, #%u", ssrc, seqnum); rtp_source_register_nack (source, seqnum); + RTP_SESSION_UNLOCK (sess); rtp_session_send_rtcp (sess, max_delay); return TRUE; + + /* ERRORS */ +no_source: + { + RTP_SESSION_UNLOCK (sess); + return FALSE; + } }