Bug 1440255 - Backout bug 1420585 deadlock wallpaper fix r?dminor draft
authorAndreas Pehrson <pehrsons@mozilla.com>
Thu, 05 Apr 2018 11:55:26 +0200
changeset 778156 f4e65b17a22e6c5a12736756d5b9446bbd05c19b
parent 778123 6ef4178ec560b862405547850b2dd1e27eda561a
child 778157 668407238764e5f2ee391e293a092e0535e51d54
push id105403
push userbmo:apehrson@mozilla.com
push dateThu, 05 Apr 2018 21:33:02 +0000
reviewersdminor
bugs1440255, 1420585
milestone61.0a1
Bug 1440255 - Backout bug 1420585 deadlock wallpaper fix r?dminor MozReview-Commit-ID: DurGH2RmXQH
media/webrtc/trunk/webrtc/modules/video_capture/android/java/src/org/webrtc/videoengine/VideoCaptureAndroid.java
--- a/media/webrtc/trunk/webrtc/modules/video_capture/android/java/src/org/webrtc/videoengine/VideoCaptureAndroid.java
+++ b/media/webrtc/trunk/webrtc/modules/video_capture/android/java/src/org/webrtc/videoengine/VideoCaptureAndroid.java
@@ -267,23 +267,21 @@ public class VideoCaptureAndroid impleme
       averageDurationMs = 1000000.0f / (max_mfps / frameDropRatio);
       camera.startPreview();
       exchange(result, true);
       return;
     } catch (RuntimeException e) {
       error = e;
     }
     Log.e(TAG, "startCapture failed", error);
-    // For some devices, camera.setParameters(parameters) would throw
-    // an exception when a specific resolution is set. Originally,
-    // stopCaptureOnCameraThread() is called here to clear up the state.
-    // However, stopCaptureOnCameraThread(), which uses Exchanger to
-    // synchronize and swap data with MediaManager thread, is supposed to be
-    // called by MediaManager thread like we did at stopCapture(). Calling
-    // this function directly in CameraThread will cause deadlock.
+    if (camera != null) {
+      Exchanger<Boolean> resultDropper = new Exchanger<Boolean>();
+      stopCaptureOnCameraThread(resultDropper);
+      exchange(resultDropper, false);
+    }
     exchange(result, false);
     return;
   }
 
   // Called by native code.  Returns true when camera is known to be stopped.
   @WebRTCJNITarget
   private synchronized boolean stopCapture() {
     Log.d(TAG, "stopCapture");