summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
authorEugene Susla <eugenesusla@google.com>2020-07-13 14:31:22 -0700
committerEugene Susla <eugenesusla@google.com>2020-07-15 19:12:05 +0000
commitaaa8d9fe67ee4f47393aa8609295dcdbac9ce095 (patch)
treee63a25a9f7a8c18d4fb7f30e5c2ccd03e26c79d6 /core/java
parent5d075be9fa131de2ab56d0a482a68cd8e4e89b93 (diff)
Run Binder.dump away from main thread
Fixes: 158212653 Test: ensure .dump() is no longer run on main thread Change-Id: I7c6e1c9f54c65c21e411813ffda636377a1c2bbe
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/permission/PermissionControllerManager.java9
1 files changed, 7 insertions, 2 deletions
diff --git a/core/java/android/permission/PermissionControllerManager.java b/core/java/android/permission/PermissionControllerManager.java
index 43bd76de1f46..17a78a8f301e 100644
--- a/core/java/android/permission/PermissionControllerManager.java
+++ b/core/java/android/permission/PermissionControllerManager.java
@@ -21,6 +21,7 @@ import static android.app.admin.DevicePolicyManager.PERMISSION_GRANT_STATE_DENIE
import static android.app.admin.DevicePolicyManager.PERMISSION_GRANT_STATE_GRANTED;
import static android.permission.PermissionControllerService.SERVICE_INTERFACE;
+import static com.android.internal.util.FunctionalUtils.uncheckExceptions;
import static com.android.internal.util.Preconditions.checkArgument;
import static com.android.internal.util.Preconditions.checkArgumentNonnegative;
import static com.android.internal.util.Preconditions.checkCollectionElementsNotNull;
@@ -56,6 +57,7 @@ import com.android.internal.annotations.GuardedBy;
import com.android.internal.infra.AndroidFuture;
import com.android.internal.infra.RemoteStream;
import com.android.internal.infra.ServiceConnector;
+import com.android.internal.os.BackgroundThread;
import com.android.internal.util.CollectionUtils;
import libcore.util.EmptyArray;
@@ -497,8 +499,11 @@ public final class PermissionControllerManager {
*/
public void dump(@NonNull FileDescriptor fd, @Nullable String[] args) {
try {
- mRemoteService.post(service -> service.asBinder().dump(fd, args))
- .get(REQUEST_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
+ mRemoteService.postAsync(service -> {
+ return AndroidFuture.runAsync(uncheckExceptions(() -> {
+ service.asBinder().dump(fd, args);
+ }), BackgroundThread.getExecutor());
+ }).get(REQUEST_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
} catch (Exception e) {
Log.e(TAG, "Could not get dump", e);
}