From bce711ea0e1bdf1fe0b68715a63421973534a5b3 Mon Sep 17 00:00:00 2001 From: Mark Lu Date: Wed, 16 Dec 2015 15:41:04 +0800 Subject: [PATCH] Fix batterySendBroadcast not synchronized issue. Symptom: system server crash. Root Cause: batterySendBroadcast not sychrnized with AMS object, caused system crash in broadcastIntentLocked() when 2 threads access mParallelBroadcasts.get(i).intent but get null in BroadcastQueue.replaceParallelBroadcastLocked(). Solution: add sychronization object. Change-Id: I99f751a2cd3e6fa1dbe2812f5f129525013d6a7f --- .../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 c589da4f6f011..c6f8b9a30d1e7 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -2614,9 +2614,11 @@ public final class ActivityManagerService extends ActivityManagerNative @Override public void batterySendBroadcast(Intent intent) { - broadcastIntentLocked(null, null, intent, null, null, 0, null, null, null, - AppOpsManager.OP_NONE, null, false, false, - -1, Process.SYSTEM_UID, UserHandle.USER_ALL); + synchronized (this) { + broadcastIntentLocked(null, null, intent, null, null, 0, null, null, null, + AppOpsManager.OP_NONE, null, false, false, + -1, Process.SYSTEM_UID, UserHandle.USER_ALL); + } } /**