From acf9ab7c3ddc976bc9d6239ae54523b9805c876d Mon Sep 17 00:00:00 2001 From: Ruben Brunk Date: Thu, 7 Nov 2013 18:12:41 -0800 Subject: Ensure mOpenCameraThread has been setup before dereferencing. Bug: 11579062 Change-Id: Iabccdbfd3468eaa47115de1dbcafa7f9e456603b --- src/com/android/camera/PhotoModule.java | 22 +++++++++++++++------- 1 file 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(); -- cgit v1.2.3