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

Commit eaf3fd59 authored by Andrei-Valentin Onea's avatar Andrei-Valentin Onea Committed by Gerrit Code Review
Browse files

Merge "Fix deadlock on CompatConfig.mChanges"

parents 523e3b9b 1ec53ec5
Loading
Loading
Loading
Loading
+15 −8
Original line number Original line Diff line number Diff line
@@ -50,6 +50,7 @@ import java.io.FileInputStream;
import java.io.IOException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.HashSet;
import java.util.List;
import java.util.List;
import java.util.Set;
import java.util.Set;
@@ -595,10 +596,17 @@ final class CompatConfig {
     * Rechecks all the existing overrides for a package.
     * Rechecks all the existing overrides for a package.
     */
     */
    void recheckOverrides(String packageName) {
    void recheckOverrides(String packageName) {
        // Local cache of compat changes. Holding a lock on mChanges for the whole duration of the
        // method will cause a deadlock.
        List<CompatChange> changes;
        synchronized (mChanges) {
        synchronized (mChanges) {
            boolean shouldInvalidateCache = false;
            changes = new ArrayList<>(mChanges.size());
            for (int idx = 0; idx < mChanges.size(); ++idx) {
            for (int idx = 0; idx < mChanges.size(); ++idx) {
                CompatChange c = mChanges.valueAt(idx);
                changes.add(mChanges.valueAt(idx));
            }
        }
        boolean shouldInvalidateCache = false;
        for (CompatChange c: changes) {
            OverrideAllowedState allowedState =
            OverrideAllowedState allowedState =
                    mOverrideValidator.getOverrideAllowedState(c.getId(), packageName);
                    mOverrideValidator.getOverrideAllowedState(c.getId(), packageName);
            shouldInvalidateCache |= c.recheckOverride(packageName, allowedState, mContext);
            shouldInvalidateCache |= c.recheckOverride(packageName, allowedState, mContext);
@@ -607,7 +615,6 @@ final class CompatConfig {
            invalidateCache();
            invalidateCache();
        }
        }
    }
    }
    }


    void registerContentObserver() {
    void registerContentObserver() {
        mOverrideValidator.registerContentObserver();
        mOverrideValidator.registerContentObserver();