summaryrefslogtreecommitdiff
path: root/core/java/android/inputmethodservice/InputMethodService.java
diff options
context:
space:
mode:
authorjiayongqiang <jiayongqiang@xiaomi.com>2021-12-10 16:20:05 +0800
committerjiayongqiang <jiayongqiang@xiaomi.com>2022-01-04 18:29:45 +0800
commitd2280b81070a084559cbe7ce184dc89cead5073a (patch)
tree69ff0cafc4e8f55c55bc2b38fe6b801944bbf37b /core/java/android/inputmethodservice/InputMethodService.java
parent2a1dc3a8e9e556ba89746d5d11063eadac83971d (diff)
Fix deadlock issue.
It might cause deadlock sometimes: The locking order of setEventsMask is: registerDisplayListener -> <DMG.mLock> -> setEventsMask -> <class lock>; The Locking order of handleMessage is: Looper.loop -> Looper.loopOnce -> Handler.dispatchMessage -> handleMessage -> <class lock>; Therefore, when the registerDisplayListener is called by client, the DisplayListenerDelegate.handleMessage also called by DMS's callback, at this time, if the method with DMG.mLock is called in handleMessage(), it will lead to deadlock. Test: (For example) Thread A: DisplayListenerDelegate.handleMessage() -> <class lock> DisplayListener.onDisplayChanged() -> DMG.getCompatibleDisplay() -> DMG.getDisplayInfo() -> <DMS.mLock> Thead B: DMG.registerDisplayListener() -> <DMS.mLock> -> DisplayListenerDelegate.setEventsMask() -> <class lock> Signed-off-by: jiayongqiang <jiayongqiang@xiaomi.com> Change-Id: Ie1a8728339c16fa8f4c4f5c758821c836fa1c96b
Diffstat (limited to 'core/java/android/inputmethodservice/InputMethodService.java')
0 files changed, 0 insertions, 0 deletions