OSDN Git Service

Make sure we're locked
authorTodd Kennedy <toddke@google.com>
Wed, 15 Jun 2016 16:54:28 +0000 (09:54 -0700)
committerTodd Kennedy <toddke@google.com>
Thu, 16 Jun 2016 14:08:09 +0000 (07:08 -0700)
Before calling a method ending with LPw, we need to have the mPackages lock.
Make sure we do that.

Also, ditch the iterator for traversing an ArraySet.

Bug: 29356333
Change-Id: I67df971f2961b577f31153cef46fb153458d6965

services/core/java/com/android/server/pm/PackageManagerService.java

index f2fde0f..f8ef3b2 100644 (file)
@@ -4753,10 +4753,8 @@ public class PackageManagerService extends IPackageManager.Stub {
                 final SharedUserSetting sus = (SharedUserSetting) obj;
                 final int N = sus.packages.size();
                 final String[] res = new String[N];
-                final Iterator<PackageSetting> it = sus.packages.iterator();
-                int i = 0;
-                while (it.hasNext()) {
-                    res[i++] = it.next().name;
+                for (int i = 0; i < N; i++) {
+                    res[i] = sus.packages.valueAt(i).name;
                 }
                 return res;
             } else if (obj instanceof PackageSetting) {
@@ -14478,7 +14476,9 @@ public class PackageManagerService extends IPackageManager.Stub {
         // Remove existing system package
         removePackageLI(deletedPackage, true);
 
-        disabledSystem = disableSystemPackageLPw(deletedPackage, pkg);
+        synchronized (mPackages) {
+            disabledSystem = disableSystemPackageLPw(deletedPackage, pkg);
+        }
         if (!disabledSystem) {
             // We didn't need to disable the .apk as a current system package,
             // which means we are replacing another update that is already