From 270799ad192ef25ca3e47d822f64ac4ba3880fe6 Mon Sep 17 00:00:00 2001 From: Riddle Hsu Date: Mon, 14 Feb 2022 21:56:11 +0800 Subject: [PATCH] Prevent potential NPE when forcing stop package during boot Some test cases may send package removal command before boot complete, e.g. around SecondaryZygotePreload stage. Then ActivityManagerService#setWindowManager is not called yet so mRootWindowContainer in ATMS is null. Bug: 219066637 Bug: 186665301 Test: Restart device by "adb shell am restart". And keep sending "adb uninstall $validPackageName". The device should still boot successfully without crash. And the target package is also removed successfully. Change-Id: I2711fabb0755b53a9817ce81ab553e5ce2a8c389 --- .../java/com/android/server/wm/ActivityTaskManagerService.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java index 193e476b993c9..4d877de65735a 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java @@ -6091,7 +6091,8 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { public boolean onForceStopPackage(String packageName, boolean doit, boolean evenPersistent, int userId) { synchronized (mGlobalLock) { - + // In case if setWindowManager hasn't been called yet when booting. + if (mRootWindowContainer == null) return false; return mRootWindowContainer.finishDisabledPackageActivities(packageName, null /* filterByClasses */, doit, evenPersistent, userId, // Only remove the activities without process because the activities with