Merge "Fix potential deadlock in applyUserRestrictions methods." into udc-dev

This commit is contained in:
Oli Lan
2023-04-06 15:37:26 +00:00
committed by Android (Google) Code Review

View File

@@ -2592,7 +2592,7 @@ public class UserManagerService extends IUserManager.Stub {
} }
} }
if (scheduleWriteUser) { if (scheduleWriteUser) {
scheduleWriteUser(userData); scheduleWriteUser(userId);
} }
} }
@@ -2902,7 +2902,7 @@ public class UserManagerService extends IUserManager.Stub {
!= newBaseRestrictions); != newBaseRestrictions);
if (mBaseUserRestrictions.updateRestrictions(userId, newBaseRestrictions)) { if (mBaseUserRestrictions.updateRestrictions(userId, newBaseRestrictions)) {
scheduleWriteUser(getUserDataNoChecks(userId)); scheduleWriteUser(userId);
} }
} }
@@ -2978,7 +2978,7 @@ public class UserManagerService extends IUserManager.Stub {
@GuardedBy("mRestrictionsLock") @GuardedBy("mRestrictionsLock")
private void applyUserRestrictionsLR(@UserIdInt int userId) { private void applyUserRestrictionsLR(@UserIdInt int userId) {
updateUserRestrictionsInternalLR(null, userId); updateUserRestrictionsInternalLR(null, userId);
scheduleWriteUser(getUserDataNoChecks(userId)); scheduleWriteUser(userId);
} }
@GuardedBy("mRestrictionsLock") @GuardedBy("mRestrictionsLock")
@@ -4129,14 +4129,14 @@ public class UserManagerService extends IUserManager.Stub {
} }
} }
private void scheduleWriteUser(UserData userData) { private void scheduleWriteUser(@UserIdInt int userId) {
if (DBG) { if (DBG) {
debug("scheduleWriteUser"); debug("scheduleWriteUser");
} }
// No need to wrap it within a lock -- worst case, we'll just post the same message // No need to wrap it within a lock -- worst case, we'll just post the same message
// twice. // twice.
if (!mHandler.hasMessages(WRITE_USER_MSG, userData)) { if (!mHandler.hasMessages(WRITE_USER_MSG, userId)) {
Message msg = mHandler.obtainMessage(WRITE_USER_MSG, userData); Message msg = mHandler.obtainMessage(WRITE_USER_MSG, userId);
mHandler.sendMessageDelayed(msg, WRITE_USER_DELAY); mHandler.sendMessageDelayed(msg, WRITE_USER_DELAY);
} }
} }
@@ -4152,7 +4152,7 @@ public class UserManagerService extends IUserManager.Stub {
// Something went wrong, schedule full rewrite. // Something went wrong, schedule full rewrite.
UserData userData = getUserDataNoChecks(userId); UserData userData = getUserDataNoChecks(userId);
if (userData != null) { if (userData != null) {
scheduleWriteUser(userData); scheduleWriteUser(userId);
} }
}); });
} }
@@ -6363,7 +6363,7 @@ public class UserManagerService extends IUserManager.Stub {
userData.info.lastLoggedInTime = now; userData.info.lastLoggedInTime = now;
} }
userData.info.lastLoggedInFingerprint = PackagePartitions.FINGERPRINT; userData.info.lastLoggedInFingerprint = PackagePartitions.FINGERPRINT;
scheduleWriteUser(userData); scheduleWriteUser(userId);
} }
/** /**
@@ -6533,7 +6533,7 @@ public class UserManagerService extends IUserManager.Stub {
private void setLastEnteredForegroundTimeToNow(@NonNull UserData userData) { private void setLastEnteredForegroundTimeToNow(@NonNull UserData userData) {
userData.mLastEnteredForegroundTimeMillis = System.currentTimeMillis(); userData.mLastEnteredForegroundTimeMillis = System.currentTimeMillis();
scheduleWriteUser(userData); scheduleWriteUser(userData.info.id);
} }
@Override @Override
@@ -6832,7 +6832,7 @@ public class UserManagerService extends IUserManager.Stub {
case WRITE_USER_MSG: case WRITE_USER_MSG:
removeMessages(WRITE_USER_MSG, msg.obj); removeMessages(WRITE_USER_MSG, msg.obj);
synchronized (mPackagesLock) { synchronized (mPackagesLock) {
int userId = ((UserData) msg.obj).info.id; int userId = (int) msg.obj;
UserData userData = getUserDataNoChecks(userId); UserData userData = getUserDataNoChecks(userId);
if (userData != null) { if (userData != null) {
writeUserLP(userData); writeUserLP(userData);