OSDN Git Service

BatteryStats: Fix deadlock
authorAdam Lesinski <adamlesinski@google.com>
Tue, 14 Jul 2015 23:27:40 +0000 (16:27 -0700)
committerAdam Lesinski <adamlesinski@google.com>
Wed, 15 Jul 2015 00:25:26 +0000 (00:25 +0000)
Bug:22486756
Change-Id: I20e10cc344b128bfa156c5aada93d3fb2b0fcaa3

services/core/java/com/android/server/am/BatteryStatsService.java

index 070813b..13b75ab 100644 (file)
@@ -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));