From 56fbbeab7931386af7ad9701fad9b62c170abd77 Mon Sep 17 00:00:00 2001 From: Eino-Ville Talvala Date: Tue, 23 Sep 2014 18:18:07 -0700 Subject: [PATCH] Camera2: Fix parallel session and device close() exception It's possible for the device to have close() called on it during the session close sequence such that the session still tries to do a stream reconfiguration on the closed device. Handle the exception thrown by this attempt. Bug: 17661765 Change-Id: Iee63c5c559405abe5c044ae251ad56edd1fb3e79 --- .../hardware/camera2/impl/CameraCaptureSessionImpl.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/core/java/android/hardware/camera2/impl/CameraCaptureSessionImpl.java b/core/java/android/hardware/camera2/impl/CameraCaptureSessionImpl.java index 68926d008d83f..5bc7f71a5b331 100644 --- a/core/java/android/hardware/camera2/impl/CameraCaptureSessionImpl.java +++ b/core/java/android/hardware/camera2/impl/CameraCaptureSessionImpl.java @@ -657,9 +657,9 @@ public class CameraCaptureSessionImpl extends CameraCaptureSession { } // Slow path: #close was called explicitly on this session; unconfigure first + mUnconfigureDrainer.taskStarted(); try { - mUnconfigureDrainer.taskStarted(); mDeviceImpl .configureOutputsChecked(null); // begin transition to unconfigured } catch (CameraAccessException e) { @@ -667,6 +667,11 @@ public class CameraCaptureSessionImpl extends CameraCaptureSession { Log.e(TAG, mIdString + "Exception while configuring outputs: ", e); // TODO: call onError instead of onClosed if this happens + } catch (IllegalStateException e) { + // Camera is already closed, so go straight to the close callback + if (VERBOSE) Log.v(TAG, mIdString + + "Camera was already closed or busy, skipping unconfigure"); + mUnconfigureDrainer.taskFinished(); } mUnconfigureDrainer.beginDrain();