diff options
-rw-r--r-- | services/core/java/com/android/server/pm/PackageHandler.java | 13 | ||||
-rw-r--r-- | services/core/java/com/android/server/pm/PackageManagerService.java | 43 |
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); } } |