Merge "Fix deadlock when creating new OneTimePermissionUserManager" into rvc-dev am: ee35eba00e am: b9553dc63e

Change-Id: Ia49c0339602740c2bbdfbb5b6e367cfc35c31cc2
This commit is contained in:
TreeHugger Robot
2020-04-15 21:11:02 +00:00
committed by Automerger Merge Worker
2 changed files with 17 additions and 9 deletions

View File

@@ -81,9 +81,6 @@ public class OneTimePermissionUserManager {
mAlarmManager = context.getSystemService(AlarmManager.class);
mPermissionControllerManager = context.getSystemService(PermissionControllerManager.class);
mHandler = context.getMainThreadHandler();
// Listen for tracked uid being uninstalled
context.registerReceiver(mUninstallListener, new IntentFilter(Intent.ACTION_UID_REMOVED));
}
/**
@@ -170,6 +167,14 @@ public class OneTimePermissionUserManager {
PROPERTY_KILLED_DELAY_CONFIG_KEY, DEFAULT_KILLED_DELAY_MILLIS);
}
/**
* Register to listen for Uids being uninstalled. This must be done outside of the
* PermissionManagerService lock.
*/
void registerUninstallListener() {
mContext.registerReceiver(mUninstallListener, new IntentFilter(Intent.ACTION_UID_REMOVED));
}
/**
* A class which watches a package for inactivity and notifies the permission controller when
* the package becomes inactive

View File

@@ -3210,16 +3210,19 @@ public class PermissionManagerService extends IPermissionManager.Stub {
}
private OneTimePermissionUserManager getOneTimePermissionUserManager(@UserIdInt int userId) {
OneTimePermissionUserManager oneTimePermissionUserManager;
synchronized (mLock) {
OneTimePermissionUserManager oneTimePermissionUserManager =
oneTimePermissionUserManager =
mOneTimePermissionUserManagers.get(userId);
if (oneTimePermissionUserManager == null) {
oneTimePermissionUserManager = new OneTimePermissionUserManager(
mContext.createContextAsUser(UserHandle.of(userId), /*flags*/ 0));
mOneTimePermissionUserManagers.put(userId, oneTimePermissionUserManager);
if (oneTimePermissionUserManager != null) {
return oneTimePermissionUserManager;
}
return oneTimePermissionUserManager;
oneTimePermissionUserManager = new OneTimePermissionUserManager(
mContext.createContextAsUser(UserHandle.of(userId), /*flags*/ 0));
mOneTimePermissionUserManagers.put(userId, oneTimePermissionUserManager);
}
oneTimePermissionUserManager.registerUninstallListener();
return oneTimePermissionUserManager;
}
@Override