srtpenc: prevent deadlock in create_session
authorPhilippe Normand <philn@igalia.com>
Tue, 6 Sep 2016 09:02:06 +0000 (11:02 +0200)
committerPhilippe Normand <philn@igalia.com>
Tue, 6 Sep 2016 09:02:06 +0000 (11:02 +0200)
Temporarily release the object lock which is needed to post error
messages on the bus.

https://bugzilla.gnome.org/show_bug.cgi?id=770933

ext/srtp/gstsrtpenc.c

index 7f46a4fda661bd7d033228d2ae8d764472c50c16..c9ae98070faffe5f4a150245ac252768e1029f48 100644 (file)
@@ -386,9 +386,11 @@ gst_srtp_enc_create_session (GstSrtpEnc * filter)
     gsize keysize;
 
     if (filter->key == NULL) {
+      GST_OBJECT_UNLOCK (filter);
       GST_ELEMENT_ERROR (filter, LIBRARY, SETTINGS,
           ("Cipher is not NULL, key must be set"),
           ("Cipher is not NULL, key must be set"));
+      GST_OBJECT_LOCK (filter);
       return err_status_fail;
     }
 
@@ -396,10 +398,12 @@ gst_srtp_enc_create_session (GstSrtpEnc * 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));
+      GST_OBJECT_LOCK (filter);
       return err_status_fail;
     }
   }