diff options
author | Ruben Brunk <rubenbrunk@google.com> | 2015-06-11 16:12:35 -0700 |
---|---|---|
committer | Ruben Brunk <rubenbrunk@google.com> | 2015-06-11 16:12:35 -0700 |
commit | 0953b6461aed9770e0e537b40988e97582d74dbd (patch) | |
tree | aa5531232f59e0951555dfca965672b49976bc56 /core/java/android/hardware | |
parent | ea7438e4a698945b3e3a7786cff726c337291a68 (diff) | |
download | frameworks_base-0953b6461aed9770e0e537b40988e97582d74dbd.zip frameworks_base-0953b6461aed9770e0e537b40988e97582d74dbd.tar.gz frameworks_base-0953b6461aed9770e0e537b40988e97582d74dbd.tar.bz2 |
Make CameraDeviceImpl#close() idempotent (for real).
- Also fixes onClosed() implementation in CameraDeviceImpl;
this would never return true previously.
Bug: 21698939
Change-Id: I4dd56a1410b9fc64152acc5296514f5841794fa9
Diffstat (limited to 'core/java/android/hardware')
-rw-r--r-- | core/java/android/hardware/camera2/impl/CameraDeviceImpl.java | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java index c073ba5..1f75562 100644 --- a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java +++ b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java @@ -52,6 +52,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; @@ -79,7 +80,7 @@ public class CameraDeviceImpl extends CameraDevice { private volatile StateCallbackKK mSessionStateCallback; private final Handler mDeviceHandler; - private volatile boolean mClosing = false; + private final AtomicBoolean mClosing = new AtomicBoolean(); private boolean mInError = false; private boolean mIdle = true; @@ -906,6 +907,10 @@ public class CameraDeviceImpl extends CameraDevice { @Override public void close() { synchronized (mInterfaceLock) { + if (mClosing.getAndSet(true)) { + return; + } + try { if (mRemoteDevice != null) { mRemoteDevice.disconnect(); @@ -1917,7 +1922,7 @@ public class CameraDeviceImpl extends CameraDevice { /** Whether the camera device has started to close (may not yet have finished) */ private boolean isClosed() { - return mClosing; + return mClosing.get(); } private CameraCharacteristics getCharacteristics() { |