diff options
author | Ruben Brunk <rubenbrunk@google.com> | 2013-11-07 18:12:41 -0800 |
---|---|---|
committer | Ruben Brunk <rubenbrunk@google.com> | 2013-11-07 18:12:41 -0800 |
commit | acf9ab7c3ddc976bc9d6239ae54523b9805c876d (patch) | |
tree | 8566bb10e7ade627350f44c658c9a8753e6b28cb | |
parent | 2f878d54ecbb62ef09aa2b0152dea983e598724f (diff) | |
download | android_packages_apps_Snap-acf9ab7c3ddc976bc9d6239ae54523b9805c876d.tar.gz android_packages_apps_Snap-acf9ab7c3ddc976bc9d6239ae54523b9805c876d.tar.bz2 android_packages_apps_Snap-acf9ab7c3ddc976bc9d6239ae54523b9805c876d.zip |
Ensure mOpenCameraThread has been setup before dereferencing.
Bug: 11579062
Change-Id: Iabccdbfd3468eaa47115de1dbcafa7f9e456603b
-rw-r--r-- | src/com/android/camera/PhotoModule.java | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/src/com/android/camera/PhotoModule.java b/src/com/android/camera/PhotoModule.java index 347244ebe..4e2b60413 100644 --- a/src/com/android/camera/PhotoModule.java +++ b/src/com/android/camera/PhotoModule.java @@ -245,9 +245,9 @@ public class PhotoModule private final Handler mHandler = new MainHandler(); /** A thread separate from the UI thread for camera startup. */ - private HandlerThread mOpenCameraThread; + private volatile HandlerThread mOpenCameraThread; /** A handler to run on the camera startup thread. */ - private Handler mOpenCameraHandler; + private volatile Handler mOpenCameraHandler; /** This lock should always protect openCamera and closeCamera. */ private final Object mCameraOpenLock = new Object(); @@ -505,7 +505,10 @@ public class PhotoModule @Override public void onPreviewUIReady() { // Requires that OPEN_CAMERA_ASYNC has been already sent. - mOpenCameraHandler.sendEmptyMessage(START_PREVIEW_ASYNC); + Handler openCameraHandler = mOpenCameraHandler; + if (openCameraHandler != null) { + openCameraHandler.sendEmptyMessage(START_PREVIEW_ASYNC); + } } @Override @@ -1355,14 +1358,19 @@ public class PhotoModule // Postpones actually releasing for KEEP_CAMERA_TIMEOUT, // so if onResume is directly called after this, the camera // simply needs to reconnect (takes about 2-5ms). - mOpenCameraHandler.removeMessages(OPEN_CAMERA_ASYNC); - mOpenCameraHandler.removeMessages(START_PREVIEW_ASYNC); + if (mOpenCameraHandler != null) { + mOpenCameraHandler.removeMessages(OPEN_CAMERA_ASYNC); + mOpenCameraHandler.removeMessages(START_PREVIEW_ASYNC); + mOpenCameraHandler = null; + } synchronized (mCameraOpenLock) { closeCamera(); } // Stop the long running open camera thread. - mOpenCameraThread.quitSafely(); - mOpenCameraThread = null; + if (mOpenCameraThread != null) { + mOpenCameraThread.quitSafely(); + mOpenCameraThread = null; + } Log.e(TAG, "Done quiting safely."); resetScreenOn(); |