summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/pm/PackageHandler.java13
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java43
2 files changed, 11 insertions, 45 deletions
diff --git a/services/core/java/com/android/server/pm/PackageHandler.java b/services/core/java/com/android/server/pm/PackageHandler.java
index 68f6ca1c019f..0a0882d80cc1 100644
--- a/services/core/java/com/android/server/pm/PackageHandler.java
+++ b/services/core/java/com/android/server/pm/PackageHandler.java
@@ -123,19 +123,10 @@ final class PackageHandler extends Handler {
}
} break;
case WRITE_SETTINGS: {
- if (!mPm.tryWriteSettings(/*sync=*/false)) {
- // Failed to write.
- this.removeMessages(WRITE_SETTINGS);
- mPm.scheduleWriteSettings();
- }
+ mPm.writeSettings(/*sync=*/false);
} break;
case WRITE_PACKAGE_LIST: {
- int userId = msg.arg1;
- if (!mPm.tryWritePackageList(userId)) {
- // Failed to write.
- this.removeMessages(WRITE_PACKAGE_LIST);
- mPm.scheduleWritePackageList(userId);
- }
+ mPm.writePackageList(msg.arg1);
} break;
case CHECK_PENDING_VERIFICATION: {
final int verificationId = msg.arg1;
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 2b0e62c0272e..ca84d68cd9bb 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -485,9 +485,6 @@ public class PackageManagerService implements PackageSender, TestUtilityService
*/
static final long WATCHDOG_TIMEOUT = 1000*60*10; // ten minutes
- // How long to wait for Lock in async writeSettings and writePackageList.
- private static final long WRITE_LOCK_TIMEOUT_MS = 1000 * 10; // 10 seconds
-
/**
* Default IncFs timeouts. Maximum values in IncFs is 1hr.
*
@@ -1576,7 +1573,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService
}
}
- void scheduleWritePackageList(int userId) {
+ void scheduleWritePackageListLocked(int userId) {
invalidatePackageInfoCache();
if (!mHandler.hasMessages(WRITE_PACKAGE_LIST)) {
Message msg = mHandler.obtainMessage(WRITE_PACKAGE_LIST);
@@ -1628,42 +1625,22 @@ public class PackageManagerService implements PackageSender, TestUtilityService
mSettings.writePackageRestrictions(dirtyUsers);
}
- private boolean tryUnderLock(boolean sync, long timeoutMs, Runnable runnable) {
- try {
- PackageManagerTracedLock.RawLock lock = mLock.getRawLock();
- if (sync) {
- lock.lock();
- } else if (!lock.tryLock(timeoutMs, TimeUnit.MILLISECONDS)) {
- return false;
- }
- try {
- runnable.run();
- return true;
- } finally {
- lock.unlock();
- }
- } catch (InterruptedException e) {
- Slog.e(TAG, "Failed to obtain mLock", e);
- }
- return false;
- }
-
- boolean tryWriteSettings(boolean sync) {
- return tryUnderLock(sync, WRITE_LOCK_TIMEOUT_MS, () -> {
+ void writeSettings(boolean sync) {
+ synchronized (mLock) {
mHandler.removeMessages(WRITE_SETTINGS);
mBackgroundHandler.removeMessages(WRITE_DIRTY_PACKAGE_RESTRICTIONS);
writeSettingsLPrTEMP(sync);
synchronized (mDirtyUsers) {
mDirtyUsers.clear();
}
- });
+ }
}
- boolean tryWritePackageList(int userId) {
- return tryUnderLock(/*sync=*/false, WRITE_LOCK_TIMEOUT_MS, () -> {
+ void writePackageList(int userId) {
+ synchronized (mLock) {
mHandler.removeMessages(WRITE_PACKAGE_LIST);
mSettings.writePackageListLPr(userId);
- });
+ }
}
private static final Handler.Callback BACKGROUND_HANDLER_CALLBACK = new Handler.Callback() {
@@ -3068,9 +3045,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService
if (mHandler.hasMessages(WRITE_SETTINGS)
|| mBackgroundHandler.hasMessages(WRITE_DIRTY_PACKAGE_RESTRICTIONS)
|| mHandler.hasMessages(WRITE_PACKAGE_LIST)) {
- while (!tryWriteSettings(/*sync=*/true)) {
- Slog.wtf(TAG, "Failed to write settings on shutdown");
- }
+ writeSettings(/*sync=*/true);
}
}
}
@@ -4432,7 +4407,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService
}
synchronized (mLock) {
scheduleWritePackageRestrictions(userId);
- scheduleWritePackageList(userId);
+ scheduleWritePackageListLocked(userId);
mAppsFilter.onUserCreated(snapshotComputer(), userId);
}
}