mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-26 06:54:49 +00:00
srtpenc: Add missing locks
https://bugzilla.gnome.org/show_bug.cgi?id=746387
This commit is contained in:
parent
2d3938c063
commit
ef4a904700
1 changed files with 21 additions and 11 deletions
|
@ -389,6 +389,8 @@ max_cipher_key_size (GstSrtpEnc * filter)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Create stream
|
/* Create stream
|
||||||
|
*
|
||||||
|
* Should be called with the filter locked
|
||||||
*/
|
*/
|
||||||
static err_status_t
|
static err_status_t
|
||||||
gst_srtp_enc_create_session (GstSrtpEnc * filter)
|
gst_srtp_enc_create_session (GstSrtpEnc * filter)
|
||||||
|
@ -400,8 +402,6 @@ gst_srtp_enc_create_session (GstSrtpEnc * filter)
|
||||||
|
|
||||||
memset (&policy, 0, sizeof (srtp_policy_t));
|
memset (&policy, 0, sizeof (srtp_policy_t));
|
||||||
|
|
||||||
GST_OBJECT_LOCK (filter);
|
|
||||||
|
|
||||||
if (HAS_CRYPTO (filter)) {
|
if (HAS_CRYPTO (filter)) {
|
||||||
guint expected;
|
guint expected;
|
||||||
gsize keysize;
|
gsize keysize;
|
||||||
|
@ -457,24 +457,26 @@ gst_srtp_enc_create_session (GstSrtpEnc * filter)
|
||||||
if (HAS_CRYPTO (filter))
|
if (HAS_CRYPTO (filter))
|
||||||
gst_buffer_unmap (filter->key, &map);
|
gst_buffer_unmap (filter->key, &map);
|
||||||
|
|
||||||
GST_OBJECT_UNLOCK (filter);
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Release ressources and set default values
|
/* Release ressources and set default values
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
gst_srtp_enc_reset (GstSrtpEnc * filter)
|
gst_srtp_enc_reset_no_lock (GstSrtpEnc * filter)
|
||||||
{
|
{
|
||||||
GST_OBJECT_LOCK (filter);
|
|
||||||
|
|
||||||
if (!filter->first_session)
|
if (!filter->first_session)
|
||||||
srtp_dealloc (filter->session);
|
srtp_dealloc (filter->session);
|
||||||
|
|
||||||
filter->first_session = TRUE;
|
filter->first_session = TRUE;
|
||||||
filter->key_changed = FALSE;
|
filter->key_changed = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gst_srtp_enc_reset (GstSrtpEnc * filter)
|
||||||
|
{
|
||||||
|
GST_OBJECT_LOCK (filter);
|
||||||
|
gst_srtp_enc_reset_no_lock (filter);
|
||||||
GST_OBJECT_UNLOCK (filter);
|
GST_OBJECT_UNLOCK (filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -982,16 +984,18 @@ gst_srtp_enc_check_set_caps (GstSrtpEnc * filter, GstPad * pad,
|
||||||
{
|
{
|
||||||
gboolean do_setcaps = FALSE;
|
gboolean do_setcaps = FALSE;
|
||||||
|
|
||||||
do_setcaps = filter->key_changed;
|
GST_OBJECT_LOCK (filter);
|
||||||
|
|
||||||
if (do_setcaps) {
|
if (filter->key_changed) {
|
||||||
gst_srtp_enc_reset (filter);
|
gst_srtp_enc_reset_no_lock (filter);
|
||||||
|
do_setcaps = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (filter->first_session) {
|
if (filter->first_session) {
|
||||||
err_status_t status = gst_srtp_enc_create_session (filter);
|
err_status_t status = gst_srtp_enc_create_session (filter);
|
||||||
|
|
||||||
if (status != err_status_ok) {
|
if (status != err_status_ok) {
|
||||||
|
GST_OBJECT_UNLOCK (filter);
|
||||||
GST_ELEMENT_ERROR (filter, LIBRARY, INIT,
|
GST_ELEMENT_ERROR (filter, LIBRARY, INIT,
|
||||||
("Could not initialize SRTP encoder"),
|
("Could not initialize SRTP encoder"),
|
||||||
("Failed to add stream to SRTP encoder (err: %d)", status));
|
("Failed to add stream to SRTP encoder (err: %d)", status));
|
||||||
|
@ -999,6 +1003,8 @@ gst_srtp_enc_check_set_caps (GstSrtpEnc * filter, GstPad * pad,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GST_OBJECT_UNLOCK (filter);
|
||||||
|
|
||||||
/* Update source caps if asked */
|
/* Update source caps if asked */
|
||||||
if (do_setcaps) {
|
if (do_setcaps) {
|
||||||
GstCaps *caps;
|
GstCaps *caps;
|
||||||
|
@ -1116,7 +1122,9 @@ gst_srtp_enc_chain (GstPad * pad, GstObject * parent, GstBuffer * buf,
|
||||||
GST_OBJECT_LOCK (filter);
|
GST_OBJECT_LOCK (filter);
|
||||||
|
|
||||||
if (gst_srtp_get_soft_limit_reached ()) {
|
if (gst_srtp_get_soft_limit_reached ()) {
|
||||||
|
GST_OBJECT_UNLOCK (filter);
|
||||||
g_signal_emit (filter, gst_srtp_enc_signals[SIGNAL_SOFT_LIMIT], 0);
|
g_signal_emit (filter, gst_srtp_enc_signals[SIGNAL_SOFT_LIMIT], 0);
|
||||||
|
GST_OBJECT_LOCK (filter);
|
||||||
if (filter->random_key && !filter->key_changed)
|
if (filter->random_key && !filter->key_changed)
|
||||||
gst_srtp_enc_replace_random_key (filter);
|
gst_srtp_enc_replace_random_key (filter);
|
||||||
}
|
}
|
||||||
|
@ -1178,8 +1186,10 @@ gst_srtp_enc_change_state (GstElement * element, GstStateChange transition)
|
||||||
"RTCP authentication can't be NULL if encryption is not NULL.");
|
"RTCP authentication can't be NULL if encryption is not NULL.");
|
||||||
return GST_STATE_CHANGE_FAILURE;
|
return GST_STATE_CHANGE_FAILURE;
|
||||||
}
|
}
|
||||||
|
GST_OBJECT_LOCK (filter);
|
||||||
if (!filter->first_session)
|
if (!filter->first_session)
|
||||||
gst_srtp_enc_reset (filter);
|
gst_srtp_enc_reset_no_lock (filter);
|
||||||
|
GST_OBJECT_UNLOCK (filter);
|
||||||
break;
|
break;
|
||||||
case GST_STATE_CHANGE_READY_TO_PAUSED:
|
case GST_STATE_CHANGE_READY_TO_PAUSED:
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in a new issue