diff options
author | Wim Taymans <wtaymans@redhat.com> | 2014-03-25 17:39:18 +0100 |
---|---|---|
committer | Wim Taymans <wtaymans@redhat.com> | 2014-03-25 17:46:32 +0100 |
commit | 9adb1734cf39acc7d297d6900415bf678d350a9a (patch) | |
tree | e923f77cac5d231254bfef5cc3fb7433b4a19fe7 /ext/srtp | |
parent | e84b0d626ceb1c3447b0ddade69be2c396f09217 (diff) | |
download | gstreamer-plugins-bad-9adb1734cf39acc7d297d6900415bf678d350a9a.tar.gz |
srtpenc: unlock object lock before posting error
Posting an error with the object lock will deadlock. Rework the code
a bit to make things more simple.
Diffstat (limited to 'ext/srtp')
-rw-r--r-- | ext/srtp/gstsrtpenc.c | 33 |
1 files changed, 12 insertions, 21 deletions
diff --git a/ext/srtp/gstsrtpenc.c b/ext/srtp/gstsrtpenc.c index 4bac174dc..5026b21e3 100644 --- a/ext/srtp/gstsrtpenc.c +++ b/ext/srtp/gstsrtpenc.c @@ -334,26 +334,6 @@ max_cipher_key_size (GstSrtpEnc * filter) return (rtp_size > rtcp_size) ? rtp_size : rtcp_size; } -static gboolean -check_key_size (GstSrtpEnc * filter) -{ - guint expected; - gboolean res; - - expected = max_cipher_key_size (filter); - - res = gst_buffer_get_size (filter->key) == expected; - - if (!res) { - GST_ELEMENT_ERROR (filter, LIBRARY, SETTINGS, - ("Master key size is wrong"), - ("Expected master key of %d bytes, but received %" G_GSIZE_FORMAT - " bytes", expected, gst_buffer_get_size (filter->key))); - } - - return res; -} - /* Create stream */ static gboolean @@ -373,6 +353,9 @@ check_new_stream_locked (GstSrtpEnc * filter, guint32 ssrc) GST_OBJECT_LOCK (filter); if (HAS_CRYPTO (filter)) { + guint expected; + gsize keysize; + if (filter->key == NULL) { GST_OBJECT_UNLOCK (filter); GST_ELEMENT_ERROR (filter, LIBRARY, SETTINGS, @@ -380,8 +363,16 @@ check_new_stream_locked (GstSrtpEnc * filter, guint32 ssrc) ("Cipher is not NULL, key must be set")); return FALSE; } - if (!check_key_size (filter)) { + + expected = max_cipher_key_size (filter); + keysize = gst_buffer_get_size (filter->key); + + if (expected != keysize) { GST_OBJECT_UNLOCK (filter); + GST_ELEMENT_ERROR (filter, LIBRARY, SETTINGS, + ("Master key size is wrong"), + ("Expected master key of %d bytes, but received %" G_GSIZE_FORMAT + " bytes", expected, keysize)); return FALSE; } } |