summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVijay kumar Tumati <vtumati@codeaurora.org>2013-09-16 18:10:20 +0530
committerSteve Kondik <shade@chemlab.org>2013-10-01 03:32:39 -0700
commit1fe582839c48822d35bdf7e5ef86adfc5c585c30 (patch)
tree30983782904eea30c3cb212052e2c351fc6cec54
parent529013a88e28dbf89f47626e7420de16b719231a (diff)
downloadandroid_packages_apps_Gallery2-1fe582839c48822d35bdf7e5ef86adfc5c585c30.tar.gz
android_packages_apps_Gallery2-1fe582839c48822d35bdf7e5ef86adfc5c585c30.tar.bz2
android_packages_apps_Gallery2-1fe582839c48822d35bdf7e5ef86adfc5c585c30.zip
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
-rw-r--r--src/com/android/camera/CameraManager.java14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/com/android/camera/CameraManager.java b/src/com/android/camera/CameraManager.java
index fb9597e45..8f10ba8b0 100644
--- a/src/com/android/camera/CameraManager.java
+++ b/src/com/android/camera/CameraManager.java
@@ -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() {