From 56d82dd28a3c7dcca9c9dc37a73a1cf5fc44498e Mon Sep 17 00:00:00 2001 From: Adam Lesinski Date: Tue, 14 Jul 2015 16:27:40 -0700 Subject: [PATCH] BatteryStats: Fix deadlock Bug:22486756 Change-Id: I20e10cc344b128bfa156c5aada93d3fb2b0fcaa3 --- services/core/java/com/android/server/am/BatteryStatsService.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/am/BatteryStatsService.java b/services/core/java/com/android/server/am/BatteryStatsService.java index 070813b703d1..13b75abcf0f5 100644 --- a/services/core/java/com/android/server/am/BatteryStatsService.java +++ b/services/core/java/com/android/server/am/BatteryStatsService.java @@ -101,8 +101,12 @@ public final class BatteryStatsService extends IBatteryStats.Stub mUpdateFlags = 0; } updateExternalStats((String)msg.obj, updateFlags); - synchronized (this) { - synchronized (mStats) { + + // other parts of the system could be calling into us + // from mStats in order to report of changes. We must grab the mStats + // lock before grabbing our own or we'll end up in a deadlock. + synchronized (mStats) { + synchronized (this) { final int numUidsToRemove = mUidsToRemove.size(); for (int i = 0; i < numUidsToRemove; i++) { mStats.removeIsolatedUidLocked(mUidsToRemove.get(i)); -- 2.11.0