OSDN Git Service

Call method while holding lock.
authorCraig Mautner <cmautner@google.com>
Mon, 4 Aug 2014 16:46:31 +0000 (09:46 -0700)
committerCraig Mautner <cmautner@google.com>
Mon, 4 Aug 2014 16:46:31 +0000 (09:46 -0700)
The method removeRecentTasksForUser() was being called without the
ActivityManagerService lock held. This change calles it while the
lock is held and renames it to indicate that it should be called
while holding the lock.

Fixes bug 16775111.

Change-Id: I002f9f96d407de458934da8bc728acd54f0c398c

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

index 0ad36fc..275185a 100755 (executable)
@@ -3695,7 +3695,7 @@ public final class ActivityManagerService extends ActivityManagerNative
     }
 
     //explicitly remove thd old information in mRecentTasks when removing existing user.
-    private void removeRecentTasksForUser(int userId) {
+    private void removeRecentTasksForUserLocked(int userId) {
         if(userId <= 0) {
             Slog.i(TAG, "Can't remove recent task on user " + userId);
             return;
@@ -17724,10 +17724,10 @@ public final class ActivityManagerService extends ActivityManagerNative
                 // Kill all the processes for the user.
                 forceStopUserLocked(userId, "finish user");
             }
-        }
 
-        // Explicitly remove the old information in mRecentTasks.
-        removeRecentTasksForUser(userId);
+            // Explicitly remove the old information in mRecentTasks.
+            removeRecentTasksForUserLocked(userId);
+        }
 
         for (int i=0; i<callbacks.size(); i++) {
             try {