Bug 1440255 - Backout bug 1420585 deadlock wallpaper fix. r=dminor, a=RyanVM
authorAndreas Pehrson <pehrsons@mozilla.com>
Thu, 05 Apr 2018 11:55:26 +0200
changeset 463116 70432546852c4ad08fbbd076917eabddd09dc1c5
parent 463115 567b3f0eaddfdcf59187662480bd5dc69b6d3c8f
child 463117 88d31bceba4719c1f7c3d3ca7d75bfa09ab900c1
push id1683
push usersfraser@mozilla.com
push dateThu, 26 Apr 2018 16:43:40 +0000
treeherdermozilla-release@5af6cb21869d [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersdminor, RyanVM
bugs1440255, 1420585
milestone60.0
Bug 1440255 - Backout bug 1420585 deadlock wallpaper fix. r=dminor, a=RyanVM 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");