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

Commit a4822a17 authored by Atneya Nair's avatar Atneya Nair
Browse files

[permission] Debugging access state concurrency

Add a fail fast check to ensure that we aren't accidentally mutating an
an object which is reachable from old state. This shouldn't happen, but
we are getting ConcurrentException in ArrayMap.

Bug: 401768134
Test: boot
Flag: EXEMPT debugging
Change-Id: I00c122200d48bd18197745e7c80e7d729361215d
parent 03e402ab
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -1753,6 +1753,13 @@ class AppIdPermissionPolicy : SchemePolicy() {
        }
        val appIdPermissionFlags = newState.mutateUserState(userId)!!.mutateAppIdPermissionFlags()
        val permissionFlags = appIdPermissionFlags.mutateOrPut(appId) { MutableIndexedMap() }
        // for debugging possible races TODO(b/401768134)
        oldState.userStates[userId]?.appIdPermissionFlags[appId]?.map?.let {
            if (permissionFlags.map === it) {
                throw IllegalStateException("Unexpected sharing between old/new state")
            }
        }

        permissionFlags.putWithDefault(permissionName, newFlags, 0)
        if (permissionFlags.isEmpty()) {
            appIdPermissionFlags -= appId