diff options
Diffstat (limited to 'core/java')
-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 ed167f0..8512b23 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() { |