wrappercamerabinsrc: fix deadlock with pad object lock
authorThiago Santos <thiagoss@osg.samsung.com>
Tue, 6 Jan 2015 00:26:22 +0000 (21:26 -0300)
committerThiago Santos <thiagoss@osg.samsung.com>
Tue, 6 Jan 2015 00:33:47 +0000 (21:33 -0300)
The image capture mutex and the pad object lock would cause a race
if the pad query was made right when the image probe was running.

The image probe needs the capture mutex and the querying would need
the pad object lock.

gst/camerabin2/gstwrappercamerabinsrc.c

index 892bac3..22e96ae 100644 (file)
@@ -838,6 +838,7 @@ start_image_capture (GstWrapperCameraBinSrc * self)
   pad = gst_element_get_static_pad (self->src_vid_src, "src");
   if (self->image_renegotiate) {
 
+    g_mutex_unlock (&bcamsrc->capturing_mutex);
     peer = gst_pad_get_peer (pad);
     gst_object_unref (pad);
     gst_pad_query (peer, gst_query_new_drain ());
@@ -845,7 +846,6 @@ start_image_capture (GstWrapperCameraBinSrc * self)
 
     self->image_renegotiate = FALSE;
 
-    g_mutex_unlock (&bcamsrc->capturing_mutex);
     gst_element_set_state (self->src_vid_src, GST_STATE_READY);
 
     /* clean capsfilter caps so they don't interfere here */