Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5ce464e4 authored by Fyodor Kupolov's avatar Fyodor Kupolov
Browse files

Avoid using global PM lock in isProtectedBroadcast

Otherwise it sometimes blocks ActivityManager for 100+ ms.

Test: manual
Bug: 62352844
Change-Id: I9b821551ba6ac884df68a164d888035e705b6f51
parent 3956654b
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -921,7 +921,8 @@ public class PackageManagerService extends IPackageManager.Stub
    final ArraySet<String> mTransferedPackages = new ArraySet<String>();
    // Broadcast actions that are only available to the system.
    final ArraySet<String> mProtectedBroadcasts = new ArraySet<String>();
    @GuardedBy("mProtectedBroadcasts")
    final ArraySet<String> mProtectedBroadcasts = new ArraySet<>();
    /** List of packages waiting for verification. */
    final SparseArray<PackageVerificationState> mPendingVerification
@@ -5805,7 +5806,7 @@ public class PackageManagerService extends IPackageManager.Stub
    @Override
    public boolean isProtectedBroadcast(String actionName) {
        // allow instant applications
        synchronized (mPackages) {
        synchronized (mProtectedBroadcasts) {
            if (mProtectedBroadcasts.contains(actionName)) {
                return true;
            } else if (actionName != null) {
@@ -11447,11 +11448,13 @@ public class PackageManagerService extends IPackageManager.Stub
            if (pkg.protectedBroadcasts != null) {
                N = pkg.protectedBroadcasts.size();
                synchronized (mProtectedBroadcasts) {
                    for (i = 0; i < N; i++) {
                        mProtectedBroadcasts.add(pkg.protectedBroadcasts.get(i));
                    }
                }
            }
        }
        Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
    }