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

Commit 1fe58283 authored by Vijay kumar Tumati's avatar Vijay kumar Tumati Committed by Steve Kondik
Browse files

Camera: Fix concurrency issues with camera messages

Without this, multiple threads are
trying to access same data and
resulting in crash.

Change-Id: I1de6f6b85e257f40a4426c7684227606f81c720a
CRs-Fixed: 542706
parent 529013a8
Loading
Loading
Loading
Loading
+10 −4
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ import android.os.Looper;
import android.os.Message;
import android.util.Log;
import android.view.SurfaceHolder;
import android.os.ConditionVariable;

import com.android.gallery3d.common.ApiHelper;

@@ -46,6 +47,9 @@ public class CameraManager {
    private static final String TAG = "CameraManager";
    private static CameraManager sCameraManager = new CameraManager();

    // Thread progress signals
    private ConditionVariable mSig = new ConditionVariable();

    private Parameters mParameters;
    private boolean mParametersIsDirty;
    private IOException mReconnectIOException;
@@ -233,9 +237,9 @@ public class CameraManager {

                    case SET_PARAMETERS:
                        mParametersIsDirty = true;
                        mParamsToSet.unflatten((String) msg.obj);
                        mCamera.setParameters(mParamsToSet);
                        return;
                        mCamera.setParameters((Parameters) msg.obj);
                        mSig.open();
                        break;

                    case GET_PARAMETERS:
                        if (mParametersIsDirty) {
@@ -445,8 +449,10 @@ public class CameraManager {
                Log.v(TAG, "null parameters in setParameters()");
                return;
            }
            mCameraHandler.obtainMessage(SET_PARAMETERS, params.flatten())
            mSig.close();
            mCameraHandler.obtainMessage(SET_PARAMETERS, params)
                    .sendToTarget();
            mSig.block();
        }

        public Parameters getParameters() {