From 8b9b9f065c0c71b22f4f8818979494e32c58e745 Mon Sep 17 00:00:00 2001 From: Yin-Chia Yeh Date: Mon, 24 Jun 2019 11:32:34 -0700 Subject: Camera: block session init callback until ctor returns To fix race condition where session init callback is executed before the ctor finished (and mSessionImpl is initialized) Test: manuall testing GCA Bug: 134218348 Change-Id: I6985b489a8cb459d9b1dce4d56a9c3e97ceb366c --- .../camera2/impl/CameraConstrainedHighSpeedCaptureSessionImpl.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/core/java/android/hardware/camera2/impl/CameraConstrainedHighSpeedCaptureSessionImpl.java b/core/java/android/hardware/camera2/impl/CameraConstrainedHighSpeedCaptureSessionImpl.java index 3494a7f2801e..eb331373e691 100644 --- a/core/java/android/hardware/camera2/impl/CameraConstrainedHighSpeedCaptureSessionImpl.java +++ b/core/java/android/hardware/camera2/impl/CameraConstrainedHighSpeedCaptureSessionImpl.java @@ -25,6 +25,7 @@ import android.hardware.camera2.params.OutputConfiguration; import android.hardware.camera2.params.StreamConfigurationMap; import android.hardware.camera2.utils.SurfaceUtils; import android.os.Handler; +import android.os.ConditionVariable; import android.util.Range; import android.view.Surface; @@ -51,6 +52,7 @@ public class CameraConstrainedHighSpeedCaptureSessionImpl extends CameraConstrainedHighSpeedCaptureSession implements CameraCaptureSessionCore { private final CameraCharacteristics mCharacteristics; private final CameraCaptureSessionImpl mSessionImpl; + private final ConditionVariable mInitialized = new ConditionVariable(); /** * Create a new CameraCaptureSession. @@ -68,6 +70,7 @@ public class CameraConstrainedHighSpeedCaptureSessionImpl CameraCaptureSession.StateCallback wrapperCallback = new WrapperCallback(callback); mSessionImpl = new CameraCaptureSessionImpl(id, /*input*/null, wrapperCallback, stateExecutor, deviceImpl, deviceStateExecutor, configureSuccess); + mInitialized.open(); } @Override @@ -321,11 +324,13 @@ public class CameraConstrainedHighSpeedCaptureSessionImpl @Override public void onConfigured(CameraCaptureSession session) { + mInitialized.block(); mCallback.onConfigured(CameraConstrainedHighSpeedCaptureSessionImpl.this); } @Override public void onConfigureFailed(CameraCaptureSession session) { + mInitialized.block(); mCallback.onConfigureFailed(CameraConstrainedHighSpeedCaptureSessionImpl.this); } -- cgit v1.2.3-59-g8ed1b