Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0953b646 authored by Ruben Brunk's avatar Ruben Brunk
Browse files

Make CameraDeviceImpl#close() idempotent (for real).

- Also fixes onClosed() implementation in CameraDeviceImpl;
  this would never return true previously.

Bug: 21698939
Change-Id: I4dd56a1410b9fc64152acc5296514f5841794fa9
parent ea7438e4
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -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() {