diff options
| author | Eugene Susla <eugenesusla@google.com> | 2020-07-13 14:31:22 -0700 |
|---|---|---|
| committer | Eugene Susla <eugenesusla@google.com> | 2020-07-15 19:12:05 +0000 |
| commit | aaa8d9fe67ee4f47393aa8609295dcdbac9ce095 (patch) | |
| tree | e63a25a9f7a8c18d4fb7f30e5c2ccd03e26c79d6 /core/java | |
| parent | 5d075be9fa131de2ab56d0a482a68cd8e4e89b93 (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.java | 9 |
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); } |
