diff options
author | juwei <juwei@codeaurora.org> | 2016-12-21 14:00:49 +0800 |
---|---|---|
committer | juwei <juwei@codeaurora.org> | 2016-12-21 14:00:49 +0800 |
commit | 082db87423ec1667adc0b1fa6077a23033962996 (patch) | |
tree | fcc3657e68a38f310e0df42d277ca7910694fd1e /src/com/android/camera/imageprocessor | |
parent | 1fd9901abce1ff4eb09b5aaa3be22e1a0d846ff7 (diff) | |
download | android_packages_apps_Snap-082db87423ec1667adc0b1fa6077a23033962996.tar.gz android_packages_apps_Snap-082db87423ec1667adc0b1fa6077a23033962996.tar.bz2 android_packages_apps_Snap-082db87423ec1667adc0b1fa6077a23033962996.zip |
SnapdragonCamera: Fix ANR caused by deadlock
Main thread first hold lock, then join another thread which also need
the same lock, hence these two thread all block.
The lock which main thread hold is not necessary, delete it.
Change-Id: I9119275e34b48bf0d0caed6a55d330374b986b81
CRs-Fixed: 1103243
Diffstat (limited to 'src/com/android/camera/imageprocessor')
-rw-r--r-- | src/com/android/camera/imageprocessor/PostProcessor.java | 45 |
1 files changed, 24 insertions, 21 deletions
diff --git a/src/com/android/camera/imageprocessor/PostProcessor.java b/src/com/android/camera/imageprocessor/PostProcessor.java index 8e6caa953..ed606e89e 100644 --- a/src/com/android/camera/imageprocessor/PostProcessor.java +++ b/src/com/android/camera/imageprocessor/PostProcessor.java @@ -603,8 +603,9 @@ public class PostProcessor{ if(mHandler != null) { mHandler.setInActive(); } - stopBackgroundThread(); } + stopBackgroundThread(); + setFilter(FILTER_NONE); if(mZSLQueue != null) { mZSLQueue.onClose(); @@ -704,29 +705,31 @@ public class PostProcessor{ mHandlerThread = null; mHandler = null; } - if (mZSLHandlerThread != null) { - mZSLHandlerThread.quitSafely(); - try { - mZSLHandlerThread.join(); - } catch (InterruptedException e) { + synchronized (lock){ + if (mZSLHandlerThread != null) { + mZSLHandlerThread.quitSafely(); + try { + mZSLHandlerThread.join(); + } catch (InterruptedException e) { + } + mZSLHandlerThread = null; + mZSLHandler = null; } - mZSLHandlerThread = null; - mZSLHandler = null; - } - if (mSavingHandlerThread != null) { - mSavingHandlerThread.quitSafely(); - try { - mSavingHandlerThread.join(); - } catch (InterruptedException e) { + if (mSavingHandlerThread != null) { + mSavingHandlerThread.quitSafely(); + try { + mSavingHandlerThread.join(); + } catch (InterruptedException e) { + } + mSavingHandlerThread = null; + mSavingHander = null; } - mSavingHandlerThread = null; - mSavingHander = null; - } - if(mWatchdog != null) { - mWatchdog.kill(); - mWatchdog = null; + if(mWatchdog != null) { + mWatchdog.kill(); + mWatchdog = null; + } + clear(); } - clear(); } public boolean setFilter(int index) { |