summaryrefslogtreecommitdiffstats
path: root/core/java/android/hardware
diff options
context:
space:
mode:
authorRuben Brunk <rubenbrunk@google.com>2015-06-11 16:12:35 -0700
committerRuben Brunk <rubenbrunk@google.com>2015-06-11 16:12:35 -0700
commit0953b6461aed9770e0e537b40988e97582d74dbd (patch)
treeaa5531232f59e0951555dfca965672b49976bc56 /core/java/android/hardware
parentea7438e4a698945b3e3a7786cff726c337291a68 (diff)
downloadframeworks_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.java9
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() {