From db6a14cc85cede0769735fdac4da70766989a3ce Mon Sep 17 00:00:00 2001 From: Amith Yamasani Date: Wed, 17 Oct 2012 21:16:52 -0700 Subject: Fix crashes when quickly adding and removing users Make USER_REMOVED an ordered broadcast and send it before the user's state is completely removed from the system. This gives services the opportunity to clean up their state, while still having access to the user's directory and UserInfo object (such as serial number). Tell SyncManager to skip over dying/partially created users. Improve UserManager tests, waiting for users to be removed fully. Bug: 7382252 Change-Id: I93cfb39c9efe6f15087bf83c569a2d154ef27168 --- core/java/android/content/SyncManager.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'core/java/android/content/SyncManager.java') diff --git a/core/java/android/content/SyncManager.java b/core/java/android/content/SyncManager.java index bb0c68642d92..05bab9c2d691 100644 --- a/core/java/android/content/SyncManager.java +++ b/core/java/android/content/SyncManager.java @@ -265,7 +265,9 @@ public class SyncManager { } private void doDatabaseCleanup() { - for (UserInfo user : mUserManager.getUsers()) { + for (UserInfo user : mUserManager.getUsers(true)) { + // Skip any partially created/removed users + if (user.partial) continue; Account[] accountsForUser = AccountManagerService.getSingleton().getAccounts(user.id); mSyncStorageEngine.doDatabaseCleanup(accountsForUser, user.id); } -- cgit v1.2.3