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

Commit 17291841 authored by Kiran Ramachandra's avatar Kiran Ramachandra Committed by Android (Google) Code Review
Browse files

Merge "IndexOutOfBoundsException fix by adding Synchronization" into main

parents 6dd390c5 9018d6c2
Loading
Loading
Loading
Loading
+37 −27
Original line number Diff line number Diff line
@@ -25,6 +25,8 @@ import android.util.ArraySet;
import android.util.Log;
import android.util.Slog;

import com.android.internal.annotations.GuardedBy;

import com.google.android.collect.Sets;

import java.io.PrintWriter;
@@ -82,7 +84,9 @@ final class UriPermission {

    static final long INVALID_TIME = Long.MIN_VALUE;

    @GuardedBy("this")
    private ArraySet<UriPermissionOwner> mReadOwners;
    @GuardedBy("this")
    private ArraySet<UriPermissionOwner> mWriteOwners;

    private String stringName;
@@ -204,6 +208,7 @@ final class UriPermission {
                persistedModeFlags &= ~Intent.FLAG_GRANT_READ_URI_PERMISSION;
            }
            globalModeFlags &= ~Intent.FLAG_GRANT_READ_URI_PERMISSION;
            synchronized (this) {
                if (mReadOwners != null && includingOwners) {
                    ownedModeFlags &= ~Intent.FLAG_GRANT_READ_URI_PERMISSION;
                    for (UriPermissionOwner r : mReadOwners) {
@@ -214,12 +219,14 @@ final class UriPermission {
                    mReadOwners = null;
                }
            }
        }
        if ((modeFlags & Intent.FLAG_GRANT_WRITE_URI_PERMISSION) != 0) {
            if (persistable) {
                persistableModeFlags &= ~Intent.FLAG_GRANT_WRITE_URI_PERMISSION;
                persistedModeFlags &= ~Intent.FLAG_GRANT_WRITE_URI_PERMISSION;
            }
            globalModeFlags &= ~Intent.FLAG_GRANT_WRITE_URI_PERMISSION;
            synchronized (this) {
                if (mWriteOwners != null && includingOwners) {
                    ownedModeFlags &= ~Intent.FLAG_GRANT_WRITE_URI_PERMISSION;
                    for (UriPermissionOwner r : mWriteOwners) {
@@ -230,6 +237,7 @@ final class UriPermission {
                    mWriteOwners = null;
                }
            }
        }

        if (persistedModeFlags == 0) {
            persistedCreateTime = INVALID_TIME;
@@ -256,7 +264,7 @@ final class UriPermission {
        }
    }

    private void addReadOwner(UriPermissionOwner owner) {
    private synchronized void addReadOwner(UriPermissionOwner owner) {
        if (mReadOwners == null) {
            mReadOwners = Sets.newArraySet();
            ownedModeFlags |= Intent.FLAG_GRANT_READ_URI_PERMISSION;
@@ -270,7 +278,7 @@ final class UriPermission {
    /**
     * Remove given read owner, updating {@Link #modeFlags} as needed.
     */
    void removeReadOwner(UriPermissionOwner owner) {
    synchronized void removeReadOwner(UriPermissionOwner owner) {
        if (mReadOwners == null || !mReadOwners.remove(owner)) {
            Slog.wtf(TAG, "Unknown read owner " + owner + " in " + this);
            return;
@@ -282,7 +290,7 @@ final class UriPermission {
        }
    }

    private void addWriteOwner(UriPermissionOwner owner) {
    private synchronized void addWriteOwner(UriPermissionOwner owner) {
        if (mWriteOwners == null) {
            mWriteOwners = Sets.newArraySet();
            ownedModeFlags |= Intent.FLAG_GRANT_WRITE_URI_PERMISSION;
@@ -296,7 +304,7 @@ final class UriPermission {
    /**
     * Remove given write owner, updating {@Link #modeFlags} as needed.
     */
    void removeWriteOwner(UriPermissionOwner owner) {
    synchronized void removeWriteOwner(UriPermissionOwner owner) {
        if (mWriteOwners == null || !mWriteOwners.remove(owner)) {
            Slog.wtf(TAG, "Unknown write owner " + owner + " in " + this);
            return;
@@ -339,6 +347,7 @@ final class UriPermission {
        }
        pw.println();

        synchronized (this) {
            if (mReadOwners != null) {
                pw.print(prefix);
                pw.println("readOwners:");
@@ -356,6 +365,7 @@ final class UriPermission {
                }
            }
        }
    }

    public static class PersistedTimeComparator implements Comparator<UriPermission> {
        @Override