diff options
| author | Vijay kumar Tumati <vtumati@codeaurora.org> | 2013-09-16 18:10:20 +0530 |
|---|---|---|
| committer | Steve Kondik <shade@chemlab.org> | 2013-10-01 03:32:39 -0700 |
| commit | 1fe582839c48822d35bdf7e5ef86adfc5c585c30 (patch) | |
| tree | 30983782904eea30c3cb212052e2c351fc6cec54 | |
| parent | 529013a88e28dbf89f47626e7420de16b719231a (diff) | |
| download | android_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.java | 14 |
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() { |
