Prevent race condition when iterating over bound services

Fixes: 71770764
Test: cts
Change-Id: Ifb7457a6b9a88b466bf39a647b92531de6c3c70e
This commit is contained in:
Eugene Susla
2018-01-10 13:21:29 -08:00
parent dd312ababe
commit 5b05f77a12

View File

@@ -1362,14 +1362,13 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
private int computeRelevantEventTypes(UserState userState, Client client) {
int relevantEventTypes = 0;
int numBoundServices = userState.mBoundServices.size();
for (int i = 0; i < numBoundServices; i++) {
AccessibilityServiceConnection service =
userState.mBoundServices.get(i);
// Use iterator for thread-safety
for (AccessibilityServiceConnection service : userState.mBoundServices) {
relevantEventTypes |= isClientInPackageWhitelist(service.getServiceInfo(), client)
? service.getRelevantEventTypes()
: 0;
}
relevantEventTypes |= isClientInPackageWhitelist(
mUiAutomationManager.getServiceInfo(), client)
? mUiAutomationManager.getRelevantEventTypes()