From 0d2ebc29689cc7cb8a5447c38ac01fe433ed693b Mon Sep 17 00:00:00 2001 From: Amith Yamasani Date: Tue, 9 Dec 2014 12:36:57 -0800 Subject: [PATCH] Allow user shutdown broadcasts to be delivered Fixes a regression that prevents the user from being fully shutdown after being stopped. Wasn't killing all user processes. Bug: 7462778 Change-Id: Iee7231f7c8a167e8a61549b149294b2dbef071c1 --- .../com/android/server/am/ActivityManagerService.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 0373611bfbde5..1227148421afd 100755 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -15700,11 +15700,13 @@ public final class ActivityManagerService extends ActivityManagerNative true, ALLOW_NON_FULL, "broadcast", callerPackage); // Make sure that the user who is receiving this broadcast is running. - // If not, we will just skip it. + // If not, we will just skip it. Make an exception for shutdown broadcasts + // and upgrade steps. if (userId != UserHandle.USER_ALL && !isUserRunningLocked(userId, false)) { - if (callingUid != Process.SYSTEM_UID || (intent.getFlags() - & Intent.FLAG_RECEIVER_BOOT_UPGRADE) == 0) { + if ((callingUid != Process.SYSTEM_UID + || (intent.getFlags() & Intent.FLAG_RECEIVER_BOOT_UPGRADE) == 0) + && !Intent.ACTION_SHUTDOWN.equals(intent.getAction())) { Slog.w(TAG, "Skipping broadcast of " + intent + ": user " + userId + " is stopped"); return ActivityManager.BROADCAST_FAILED_USER_STOPPED;