Loading services/core/java/com/android/server/pm/InstallPackageHelper.java +3 −1 Original line number Diff line number Diff line Loading @@ -849,7 +849,9 @@ final class InstallPackageHelper { int token; if (mPm.mNextInstallToken < 0) mPm.mNextInstallToken = 1; token = mPm.mNextInstallToken++; synchronized (mPm.mRunningInstalls) { mPm.mRunningInstalls.put(token, request); } if (DEBUG_INSTALL) Log.v(TAG, "+ starting restore round-trip " + token); Loading services/core/java/com/android/server/pm/PackageHandler.java +12 −6 Original line number Diff line number Diff line Loading @@ -82,14 +82,20 @@ final class PackageHandler extends Handler { case POST_INSTALL: { if (DEBUG_INSTALL) Log.v(TAG, "Handling post-install for " + msg.arg1); InstallRequest request = mPm.mRunningInstalls.get(msg.arg1); final boolean didRestore = (msg.arg2 != 0); mPm.mRunningInstalls.delete(msg.arg1); final InstallRequest request; final int token; final boolean didRestore; synchronized (mPm.mRunningInstalls) { request= mPm.mRunningInstalls.get(msg.arg1); token = msg.arg1; didRestore = (msg.arg2 != 0); mPm.mRunningInstalls.delete(token); } if (request == null) { if (DEBUG_INSTALL) { Slog.i(TAG, "InstallRequest is null. Nothing to do for post-install " + "token " + msg.arg1); + "token " + token); } break; } Loading @@ -100,10 +106,10 @@ final class PackageHandler extends Handler { mPm.handlePackagePostInstall(request, didRestore); } else if (DEBUG_INSTALL) { // No post-install when we run restore from installExistingPackageForUser Slog.i(TAG, "Nothing to do for post-install token " + msg.arg1); Slog.i(TAG, "Nothing to do for post-install token " + token); } Trace.asyncTraceEnd(TRACE_TAG_PACKAGE_MANAGER, "postInstall", msg.arg1); Trace.asyncTraceEnd(TRACE_TAG_PACKAGE_MANAGER, "postInstall", token); } break; case DEFERRED_NO_KILL_POST_DELETE: { CleanUpArgs args = (CleanUpArgs) msg.obj; Loading services/core/java/com/android/server/pm/PackageManagerService.java +17 −13 Original line number Diff line number Diff line Loading @@ -960,6 +960,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService // Stores a list of users whose package restrictions file needs to be updated final ArraySet<Integer> mDirtyUsers = new ArraySet<>(); @GuardedBy("mRunningInstalls") final SparseArray<InstallRequest> mRunningInstalls = new SparseArray<>(); int mNextInstallToken = 1; // nonzero; will be wrapped back to 1 when ++ overflows Loading Loading @@ -3291,15 +3292,17 @@ public class PackageManagerService implements PackageSender, TestUtilityService // and been launched through some other means, so it is not in a problematic // state for observers to see the FIRST_LAUNCH signal. mHandler.post(() -> { synchronized (mRunningInstalls) { for (int i = 0; i < mRunningInstalls.size(); i++) { final InstallRequest installRequest = mRunningInstalls.valueAt(i); if (installRequest.getReturnCode() != PackageManager.INSTALL_SUCCEEDED) { continue; } final int[] newUsers = installRequest.getNewUsers(); if (packageName.equals(installRequest.getPkg().getPackageName())) { // right package; but is it for the right user? for (int uIndex = 0; uIndex < installRequest.getNewUsers().length; uIndex++) { if (userId == installRequest.getNewUsers()[uIndex]) { for (int uIndex = 0; uIndex < newUsers.length; uIndex++) { if (userId == newUsers[uIndex]) { if (DEBUG_BACKUP) { Slog.i(TAG, "Package " + packageName + " being restored so deferring FIRST_LAUNCH"); Loading @@ -3309,6 +3312,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService } } } } // didn't find it, so not being restored if (DEBUG_BACKUP) { Slog.i(TAG, "Package " + packageName + " sending normal FIRST_LAUNCH"); Loading Loading
services/core/java/com/android/server/pm/InstallPackageHelper.java +3 −1 Original line number Diff line number Diff line Loading @@ -849,7 +849,9 @@ final class InstallPackageHelper { int token; if (mPm.mNextInstallToken < 0) mPm.mNextInstallToken = 1; token = mPm.mNextInstallToken++; synchronized (mPm.mRunningInstalls) { mPm.mRunningInstalls.put(token, request); } if (DEBUG_INSTALL) Log.v(TAG, "+ starting restore round-trip " + token); Loading
services/core/java/com/android/server/pm/PackageHandler.java +12 −6 Original line number Diff line number Diff line Loading @@ -82,14 +82,20 @@ final class PackageHandler extends Handler { case POST_INSTALL: { if (DEBUG_INSTALL) Log.v(TAG, "Handling post-install for " + msg.arg1); InstallRequest request = mPm.mRunningInstalls.get(msg.arg1); final boolean didRestore = (msg.arg2 != 0); mPm.mRunningInstalls.delete(msg.arg1); final InstallRequest request; final int token; final boolean didRestore; synchronized (mPm.mRunningInstalls) { request= mPm.mRunningInstalls.get(msg.arg1); token = msg.arg1; didRestore = (msg.arg2 != 0); mPm.mRunningInstalls.delete(token); } if (request == null) { if (DEBUG_INSTALL) { Slog.i(TAG, "InstallRequest is null. Nothing to do for post-install " + "token " + msg.arg1); + "token " + token); } break; } Loading @@ -100,10 +106,10 @@ final class PackageHandler extends Handler { mPm.handlePackagePostInstall(request, didRestore); } else if (DEBUG_INSTALL) { // No post-install when we run restore from installExistingPackageForUser Slog.i(TAG, "Nothing to do for post-install token " + msg.arg1); Slog.i(TAG, "Nothing to do for post-install token " + token); } Trace.asyncTraceEnd(TRACE_TAG_PACKAGE_MANAGER, "postInstall", msg.arg1); Trace.asyncTraceEnd(TRACE_TAG_PACKAGE_MANAGER, "postInstall", token); } break; case DEFERRED_NO_KILL_POST_DELETE: { CleanUpArgs args = (CleanUpArgs) msg.obj; Loading
services/core/java/com/android/server/pm/PackageManagerService.java +17 −13 Original line number Diff line number Diff line Loading @@ -960,6 +960,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService // Stores a list of users whose package restrictions file needs to be updated final ArraySet<Integer> mDirtyUsers = new ArraySet<>(); @GuardedBy("mRunningInstalls") final SparseArray<InstallRequest> mRunningInstalls = new SparseArray<>(); int mNextInstallToken = 1; // nonzero; will be wrapped back to 1 when ++ overflows Loading Loading @@ -3291,15 +3292,17 @@ public class PackageManagerService implements PackageSender, TestUtilityService // and been launched through some other means, so it is not in a problematic // state for observers to see the FIRST_LAUNCH signal. mHandler.post(() -> { synchronized (mRunningInstalls) { for (int i = 0; i < mRunningInstalls.size(); i++) { final InstallRequest installRequest = mRunningInstalls.valueAt(i); if (installRequest.getReturnCode() != PackageManager.INSTALL_SUCCEEDED) { continue; } final int[] newUsers = installRequest.getNewUsers(); if (packageName.equals(installRequest.getPkg().getPackageName())) { // right package; but is it for the right user? for (int uIndex = 0; uIndex < installRequest.getNewUsers().length; uIndex++) { if (userId == installRequest.getNewUsers()[uIndex]) { for (int uIndex = 0; uIndex < newUsers.length; uIndex++) { if (userId == newUsers[uIndex]) { if (DEBUG_BACKUP) { Slog.i(TAG, "Package " + packageName + " being restored so deferring FIRST_LAUNCH"); Loading @@ -3309,6 +3312,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService } } } } // didn't find it, so not being restored if (DEBUG_BACKUP) { Slog.i(TAG, "Package " + packageName + " sending normal FIRST_LAUNCH"); Loading