camerabin: Avoid assertion on image finishing
authorLasse Laukkanen <ext-lasse.2.laukkanen@nokia.com>
Thu, 2 Dec 2010 08:39:14 +0000 (05:39 -0300)
committerThiago Santos <thiago.sousa.santos@collabora.co.uk>
Thu, 2 Dec 2010 08:42:08 +0000 (05:42 -0300)
As imgbin_finished() is scheduled from g_idle_add, it might
be run a little later than expected, this can lead to the application
setting camerabin to ready before imgbin_finished() runs. In this case,
the processing counter goes to 0 and an assertion happens.

This patch relaxes the imgbin_finished() check on the processing
counter.

gst/camerabin/gstcamerabin.c

index 7375402..3645daf 100644 (file)
@@ -3923,7 +3923,17 @@ gst_camerabin_imgbin_finished (gpointer u_data)
   /* Close the file of saved image */
   gst_element_set_state (camera->imgbin, GST_STATE_READY);
   GST_DEBUG_OBJECT (camera, "Image pipeline set to READY");
-  CAMERABIN_PROCESSING_DEC (camera);
+
+  g_mutex_lock (camera->capture_mutex);
+  if (camera->processing_counter) {
+    CAMERABIN_PROCESSING_DEC_UNLOCKED (camera);
+  } else {
+    /* Camerabin state change to READY may have reset processing counter to
+     * zero. This is possible as this functions is scheduled from g_idle_add
+     */
+    GST_WARNING_OBJECT (camera, "camerabin has been forced to idle");
+  }
+  g_mutex_unlock (camera->capture_mutex);
 
   /* Send image-done signal */
   gst_camerabin_image_capture_continue (camera, filename);