Merge "Fix deadlock in DPMS" into tm-dev

This commit is contained in:
Ayush Sharma
2022-03-23 10:10:43 +00:00
committed by Android (Google) Code Review

View File

@@ -1164,7 +1164,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
policy.mAdminList.remove(i); policy.mAdminList.remove(i);
policy.mAdminMap.remove(aa.info.getComponent()); policy.mAdminMap.remove(aa.info.getComponent());
pushActiveAdminPackagesLocked(userHandle); pushActiveAdminPackagesLocked(userHandle);
pushMeteredDisabledPackagesLocked(userHandle); pushMeteredDisabledPackages(userHandle);
} }
} }
} catch (RemoteException re) { } catch (RemoteException re) {
@@ -3571,7 +3571,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
for (int i = users.size() - 1; i >= 0; --i) { for (int i = users.size() - 1; i >= 0; --i) {
final int userId = users.get(i).id; final int userId = users.get(i).id;
mInjector.getNetworkPolicyManagerInternal().setMeteredRestrictedPackagesAsync( mInjector.getNetworkPolicyManagerInternal().setMeteredRestrictedPackagesAsync(
getMeteredDisabledPackagesLocked(userId), userId); getMeteredDisabledPackages(userId), userId);
} }
} }
} }
@@ -14692,7 +14692,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
final List<String> excludedPkgs = removeInvalidPkgsForMeteredDataRestriction( final List<String> excludedPkgs = removeInvalidPkgsForMeteredDataRestriction(
caller.getUserId(), packageNames); caller.getUserId(), packageNames);
admin.meteredDisabledPackages = packageNames; admin.meteredDisabledPackages = packageNames;
pushMeteredDisabledPackagesLocked(caller.getUserId()); pushMeteredDisabledPackages(caller.getUserId());
saveSettingsLocked(caller.getUserId()); saveSettingsLocked(caller.getUserId());
return excludedPkgs; return excludedPkgs;
}); });
@@ -14844,21 +14844,22 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
isProfileOwnerOnOrganizationOwnedDevice); isProfileOwnerOnOrganizationOwnedDevice);
} }
private void pushMeteredDisabledPackagesLocked(int userId) { private void pushMeteredDisabledPackages(int userId) {
wtfIfInLock();
mInjector.getNetworkPolicyManagerInternal().setMeteredRestrictedPackages( mInjector.getNetworkPolicyManagerInternal().setMeteredRestrictedPackages(
getMeteredDisabledPackagesLocked(userId), userId); getMeteredDisabledPackages(userId), userId);
} }
private Set<String> getMeteredDisabledPackagesLocked(int userId) { private Set<String> getMeteredDisabledPackages(int userId) {
final ComponentName who = getOwnerComponent(userId); synchronized (getLockObject()) {
final Set<String> restrictedPkgs = new ArraySet<>(); final Set<String> restrictedPkgs = new ArraySet<>();
if (who != null) { final ActiveAdmin admin = getDeviceOrProfileOwnerAdminLocked(userId);
final ActiveAdmin admin = getActiveAdminUncheckedLocked(who, userId);
if (admin != null && admin.meteredDisabledPackages != null) { if (admin != null && admin.meteredDisabledPackages != null) {
restrictedPkgs.addAll(admin.meteredDisabledPackages); restrictedPkgs.addAll(admin.meteredDisabledPackages);
} }
return restrictedPkgs;
} }
return restrictedPkgs;
} }
@Override @Override
@@ -15302,13 +15303,13 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
resetGlobalProxyLocked(policy); resetGlobalProxyLocked(policy);
} }
pushActiveAdminPackagesLocked(userHandle); pushActiveAdminPackagesLocked(userHandle);
pushMeteredDisabledPackagesLocked(userHandle);
saveSettingsLocked(userHandle); saveSettingsLocked(userHandle);
updateMaximumTimeToLockLocked(userHandle); updateMaximumTimeToLockLocked(userHandle);
policy.mRemovingAdmins.remove(adminReceiver); policy.mRemovingAdmins.remove(adminReceiver);
Slogf.i(LOG_TAG, "Device admin " + adminReceiver + " removed from user " + userHandle); Slogf.i(LOG_TAG, "Device admin " + adminReceiver + " removed from user " + userHandle);
} }
pushMeteredDisabledPackages(userHandle);
// The removed admin might have disabled camera, so update user // The removed admin might have disabled camera, so update user
// restrictions. // restrictions.
pushUserRestrictions(userHandle); pushUserRestrictions(userHandle);