am b0975540
: Merge "Avoid deadlock between mUsers and cacheLock" into klp-dev
* commit 'b0975540a42f10fad08364b636a22bcba33609a6': Avoid deadlock between mUsers and cacheLock
This commit is contained in:
@ -293,8 +293,8 @@ public class AccountManagerService
|
|||||||
return mUserManager;
|
return mUserManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
private UserAccounts initUser(int userId) {
|
/* Caller should lock mUsers */
|
||||||
synchronized (mUsers) {
|
private UserAccounts initUserLocked(int userId) {
|
||||||
UserAccounts accounts = mUsers.get(userId);
|
UserAccounts accounts = mUsers.get(userId);
|
||||||
if (accounts == null) {
|
if (accounts == null) {
|
||||||
accounts = new UserAccounts(mContext, userId);
|
accounts = new UserAccounts(mContext, userId);
|
||||||
@ -304,7 +304,6 @@ public class AccountManagerService
|
|||||||
}
|
}
|
||||||
return accounts;
|
return accounts;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private void purgeOldGrantsAll() {
|
private void purgeOldGrantsAll() {
|
||||||
synchronized (mUsers) {
|
synchronized (mUsers) {
|
||||||
@ -427,7 +426,7 @@ public class AccountManagerService
|
|||||||
synchronized (mUsers) {
|
synchronized (mUsers) {
|
||||||
UserAccounts accounts = mUsers.get(userId);
|
UserAccounts accounts = mUsers.get(userId);
|
||||||
if (accounts == null) {
|
if (accounts == null) {
|
||||||
accounts = initUser(userId);
|
accounts = initUserLocked(userId);
|
||||||
mUsers.append(userId, accounts);
|
mUsers.append(userId, accounts);
|
||||||
}
|
}
|
||||||
return accounts;
|
return accounts;
|
||||||
@ -1798,7 +1797,6 @@ public class AccountManagerService
|
|||||||
|
|
||||||
private AccountAndUser[] getAccounts(int[] userIds) {
|
private AccountAndUser[] getAccounts(int[] userIds) {
|
||||||
final ArrayList<AccountAndUser> runningAccounts = Lists.newArrayList();
|
final ArrayList<AccountAndUser> runningAccounts = Lists.newArrayList();
|
||||||
synchronized (mUsers) {
|
|
||||||
for (int userId : userIds) {
|
for (int userId : userIds) {
|
||||||
UserAccounts userAccounts = getUserAccounts(userId);
|
UserAccounts userAccounts = getUserAccounts(userId);
|
||||||
if (userAccounts == null) continue;
|
if (userAccounts == null) continue;
|
||||||
@ -1810,7 +1808,6 @@ public class AccountManagerService
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
AccountAndUser[] accountsArray = new AccountAndUser[runningAccounts.size()];
|
AccountAndUser[] accountsArray = new AccountAndUser[runningAccounts.size()];
|
||||||
return runningAccounts.toArray(accountsArray);
|
return runningAccounts.toArray(accountsArray);
|
||||||
@ -2858,7 +2855,8 @@ public class AccountManagerService
|
|||||||
|| callingUid == Process.myUid()) {
|
|| callingUid == Process.myUid()) {
|
||||||
return unfiltered;
|
return unfiltered;
|
||||||
}
|
}
|
||||||
if (mUserManager.getUserInfo(userAccounts.userId).isRestricted()) {
|
UserInfo user = mUserManager.getUserInfo(userAccounts.userId);
|
||||||
|
if (user != null && user.isRestricted()) {
|
||||||
String[] packages = mPackageManager.getPackagesForUid(callingUid);
|
String[] packages = mPackageManager.getPackagesForUid(callingUid);
|
||||||
// If any of the packages is a white listed package, return the full set,
|
// If any of the packages is a white listed package, return the full set,
|
||||||
// otherwise return non-shared accounts only.
|
// otherwise return non-shared accounts only.
|
||||||
|
Reference in New Issue
Block a user