From 31b15473c0ccabef60d459f16f99f4856386196e Mon Sep 17 00:00:00 2001 From: Keun young Park Date: Mon, 10 Jan 2022 16:43:21 -0800 Subject: [PATCH] bgdexopt: fix deadlock between dump and dexopt thread - Calling JobScheduler API under mLock leads into accessing PMS lock which is held when dump is called from PMS. : This leads into deadlock. - Call JobScheduler outside mLock as that is safe without mLock. Bug: 213945104 Test: run bgdexopt CTS which runs dump and dexopt thread. Change-Id: I3aabd18e6ec1ec7e158eb008b90dee90b8621c60 --- .../java/com/android/server/pm/BackgroundDexOptService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/pm/BackgroundDexOptService.java b/services/core/java/com/android/server/pm/BackgroundDexOptService.java index 05a51ccfaca7b..31df0a53eaa9d 100644 --- a/services/core/java/com/android/server/pm/BackgroundDexOptService.java +++ b/services/core/java/com/android/server/pm/BackgroundDexOptService.java @@ -896,10 +896,10 @@ public final class BackgroundDexOptService { synchronized (mLock) { if (!mFinishedPostBootUpdate) { mFinishedPostBootUpdate = true; - JobScheduler js = mInjector.getJobScheduler(); - js.cancel(JOB_POST_BOOT_UPDATE); } } + // Safe to do this outside lock. + mInjector.getJobScheduler().cancel(JOB_POST_BOOT_UPDATE); } private void notifyPinService(ArraySet updatedPackages) {