summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHai Zhang <zhanghai@google.com>2019-07-29 11:22:50 -0700
committerHai Zhang <zhanghai@google.com>2019-07-29 18:42:56 +0000
commit8465ba736713fcc3f43ab8eede21bae5f207ded5 (patch)
tree1bb81b2899183762d005335f915f22f11b69663b
parent718d70bce64f074b06ee0763e1e5b730fb115699 (diff)
downloadandroid_packages_apps_PackageInstaller-8465ba736713fcc3f43ab8eede21bae5f207ded5.tar.gz
android_packages_apps_PackageInstaller-8465ba736713fcc3f43ab8eede21bae5f207ded5.tar.bz2
android_packages_apps_PackageInstaller-8465ba736713fcc3f43ab8eede21bae5f207ded5.zip
Use serial executor for permission operations.
If the methods are called concurrently and we are calling AppPermissions.persistChanges(), we might be overwriting the state that have been changed by another thread but not reflected in our state obtained earlier. Fixes: 133398449 Test: presubmit Change-Id: I63f715bafbf0ce24e75246930c7b271ee64b2e1b
-rw-r--r--src/com/android/packageinstaller/permission/service/PermissionControllerServiceImpl.java18
1 files changed, 8 insertions, 10 deletions
diff --git a/src/com/android/packageinstaller/permission/service/PermissionControllerServiceImpl.java b/src/com/android/packageinstaller/permission/service/PermissionControllerServiceImpl.java
index 6427ba36..d846ce09 100644
--- a/src/com/android/packageinstaller/permission/service/PermissionControllerServiceImpl.java
+++ b/src/com/android/packageinstaller/permission/service/PermissionControllerServiceImpl.java
@@ -67,9 +67,8 @@ import java.util.function.IntConsumer;
/**
* Calls from the system into the permission controller.
*
- * All methods are called async beside the backup related method. For these we force to use the
- * async-task single thread executor so that multiple parallel backups don't override the delayed
- * the backup state racily.
+ * All reading methods are called async, and all writing method are called on the AsyncTask single
+ * thread executor so that multiple writes won't override each other concurrently.
*/
public final class PermissionControllerServiceImpl extends PermissionControllerService {
private static final String LOG_TAG = PermissionControllerServiceImpl.class.getSimpleName();
@@ -210,8 +209,8 @@ public final class PermissionControllerServiceImpl extends PermissionControllerS
public void onRevokeRuntimePermissions(@NonNull Map<String, List<String>> request,
boolean doDryRun, int reason, @NonNull String callerPackageName,
@NonNull Consumer<Map<String, List<String>>> callback) {
- AsyncTask.THREAD_POOL_EXECUTOR.execute(() -> callback.accept(
- onRevokeRuntimePermissions(request, doDryRun, reason, callerPackageName)));
+ AsyncTask.execute(() -> callback.accept(onRevokeRuntimePermissions(request, doDryRun,
+ reason, callerPackageName)));
}
private @NonNull Map<String, List<String>> onRevokeRuntimePermissions(
@@ -403,7 +402,7 @@ public final class PermissionControllerServiceImpl extends PermissionControllerS
@Override
public void onRevokeRuntimePermission(@NonNull String packageName,
@NonNull String permissionName, @NonNull Runnable callback) {
- AsyncTask.THREAD_POOL_EXECUTOR.execute(() -> {
+ AsyncTask.execute(() -> {
onRevokeRuntimePermission(packageName, permissionName);
callback.run();
});
@@ -503,9 +502,8 @@ public final class PermissionControllerServiceImpl extends PermissionControllerS
public void onSetRuntimePermissionGrantStateByDeviceAdmin(@NonNull String callerPackageName,
@NonNull String packageName, @NonNull String unexpandedPermission, int grantState,
@NonNull Consumer<Boolean> callback) {
- AsyncTask.THREAD_POOL_EXECUTOR.execute(() -> callback.accept(
- onSetRuntimePermissionGrantStateByDeviceAdmin(callerPackageName, packageName,
- unexpandedPermission, grantState)));
+ AsyncTask.execute(() -> callback.accept(onSetRuntimePermissionGrantStateByDeviceAdmin(
+ callerPackageName, packageName, unexpandedPermission, grantState)));
}
private boolean onSetRuntimePermissionGrantStateByDeviceAdmin(@NonNull String callerPackageName,
@@ -568,7 +566,7 @@ public final class PermissionControllerServiceImpl extends PermissionControllerS
@Override
public void onGrantOrUpgradeDefaultRuntimePermissions(@NonNull Runnable callback) {
- AsyncTask.THREAD_POOL_EXECUTOR.execute(() -> {
+ AsyncTask.execute(() -> {
onGrantOrUpgradeDefaultRuntimePermissions();
callback.run();
});