Merge "Fix race condition when collecting op callback."
This commit is contained in:
@@ -513,33 +513,35 @@ public class AppOpsService extends IAppOpsService.Stub {
|
|||||||
String[] uidPackageNames = getPackagesForUid(uid);
|
String[] uidPackageNames = getPackagesForUid(uid);
|
||||||
ArrayMap<Callback, ArraySet<String>> callbackSpecs = null;
|
ArrayMap<Callback, ArraySet<String>> callbackSpecs = null;
|
||||||
|
|
||||||
ArrayList<Callback> callbacks = mOpModeWatchers.get(code);
|
synchronized (this) {
|
||||||
if (callbacks != null) {
|
ArrayList<Callback> callbacks = mOpModeWatchers.get(code);
|
||||||
final int callbackCount = callbacks.size();
|
|
||||||
for (int i = 0; i < callbackCount; i++) {
|
|
||||||
Callback callback = callbacks.get(i);
|
|
||||||
ArraySet<String> changedPackages = new ArraySet<>();
|
|
||||||
Collections.addAll(changedPackages, uidPackageNames);
|
|
||||||
callbackSpecs = new ArrayMap<>();
|
|
||||||
callbackSpecs.put(callback, changedPackages);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (String uidPackageName : uidPackageNames) {
|
|
||||||
callbacks = mPackageModeWatchers.get(uidPackageName);
|
|
||||||
if (callbacks != null) {
|
if (callbacks != null) {
|
||||||
if (callbackSpecs == null) {
|
|
||||||
callbackSpecs = new ArrayMap<>();
|
|
||||||
}
|
|
||||||
final int callbackCount = callbacks.size();
|
final int callbackCount = callbacks.size();
|
||||||
for (int i = 0; i < callbackCount; i++) {
|
for (int i = 0; i < callbackCount; i++) {
|
||||||
Callback callback = callbacks.get(i);
|
Callback callback = callbacks.get(i);
|
||||||
ArraySet<String> changedPackages = callbackSpecs.get(callback);
|
ArraySet<String> changedPackages = new ArraySet<>();
|
||||||
if (changedPackages == null) {
|
Collections.addAll(changedPackages, uidPackageNames);
|
||||||
changedPackages = new ArraySet<>();
|
callbackSpecs = new ArrayMap<>();
|
||||||
callbackSpecs.put(callback, changedPackages);
|
callbackSpecs.put(callback, changedPackages);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (String uidPackageName : uidPackageNames) {
|
||||||
|
callbacks = mPackageModeWatchers.get(uidPackageName);
|
||||||
|
if (callbacks != null) {
|
||||||
|
if (callbackSpecs == null) {
|
||||||
|
callbackSpecs = new ArrayMap<>();
|
||||||
|
}
|
||||||
|
final int callbackCount = callbacks.size();
|
||||||
|
for (int i = 0; i < callbackCount; i++) {
|
||||||
|
Callback callback = callbacks.get(i);
|
||||||
|
ArraySet<String> changedPackages = callbackSpecs.get(callback);
|
||||||
|
if (changedPackages == null) {
|
||||||
|
changedPackages = new ArraySet<>();
|
||||||
|
callbackSpecs.put(callback, changedPackages);
|
||||||
|
}
|
||||||
|
changedPackages.add(uidPackageName);
|
||||||
}
|
}
|
||||||
changedPackages.add(uidPackageName);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1773,7 +1775,7 @@ public class AppOpsService extends IAppOpsService.Stub {
|
|||||||
private static String[] getPackagesForUid(int uid) {
|
private static String[] getPackagesForUid(int uid) {
|
||||||
String[] packageNames = null;
|
String[] packageNames = null;
|
||||||
try {
|
try {
|
||||||
packageNames= AppGlobals.getPackageManager().getPackagesForUid(uid);
|
packageNames = AppGlobals.getPackageManager().getPackagesForUid(uid);
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
/* ignore - local call */
|
/* ignore - local call */
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user