diff options
author | Sergey Volnov <volnov@google.com> | 2020-01-24 15:48:02 +0000 |
---|---|---|
committer | Sergey Volnov <volnov@google.com> | 2020-01-24 16:57:35 +0000 |
commit | d7e984444503b5d1bcaed9fb9c914651f80616f4 (patch) | |
tree | 67f1de22d95552001340d2273a7caa04b15a04e0 /services/contentcapture | |
parent | 6e049014a75aef84c6c76bfa8fcaf761f95a5d2d (diff) |
Use cancellation signals for timeouts and cancel-by-CCService operations
Bug: 148264965
Test: built Android + manually tested
Change-Id: I95f7ec2bb96b8b6d6ead106877f9d7128e3ec209
Diffstat (limited to 'services/contentcapture')
-rw-r--r-- | services/contentcapture/java/com/android/server/contentcapture/ContentCaptureManagerService.java | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/services/contentcapture/java/com/android/server/contentcapture/ContentCaptureManagerService.java b/services/contentcapture/java/com/android/server/contentcapture/ContentCaptureManagerService.java index eedc57e942ae..24aa32a273aa 100644 --- a/services/contentcapture/java/com/android/server/contentcapture/ContentCaptureManagerService.java +++ b/services/contentcapture/java/com/android/server/contentcapture/ContentCaptureManagerService.java @@ -646,6 +646,7 @@ public final class ContentCaptureManagerService extends @Override public void shareData(@NonNull DataShareRequest request, + @NonNull ICancellationSignal clientCancellationSignal, @NonNull IDataShareWriteAdapter clientAdapter) { Preconditions.checkNotNull(request); Preconditions.checkNotNull(clientAdapter); @@ -667,7 +668,8 @@ public final class ContentCaptureManagerService extends } service.onDataSharedLocked(request, - new DataShareCallbackDelegate(request, clientAdapter)); + new DataShareCallbackDelegate(request, clientCancellationSignal, + clientAdapter)); } } @@ -920,17 +922,20 @@ public final class ContentCaptureManagerService extends private class DataShareCallbackDelegate extends IDataShareCallback.Stub { @NonNull private final DataShareRequest mDataShareRequest; + @NonNull private final ICancellationSignal mClientCancellationSignal; @NonNull private final IDataShareWriteAdapter mClientAdapter; DataShareCallbackDelegate(@NonNull DataShareRequest dataShareRequest, + @NonNull ICancellationSignal clientCancellationSignal, @NonNull IDataShareWriteAdapter clientAdapter) { mDataShareRequest = dataShareRequest; + mClientCancellationSignal = clientCancellationSignal; mClientAdapter = clientAdapter; } @Override - public void accept(IDataShareReadAdapter serviceAdapter) - throws RemoteException { + public void accept(ICancellationSignal serviceCancellationSignal, + IDataShareReadAdapter serviceAdapter) throws RemoteException { Slog.i(mTag, "Data share request accepted by Content Capture service"); Pair<ParcelFileDescriptor, ParcelFileDescriptor> clientPipe = createPipe(); @@ -962,15 +967,12 @@ public final class ContentCaptureManagerService extends mClientAdapter.write(source_in); serviceAdapter.start(sink_out, cancellationSignalTransport); - // TODO(b/148264965): use cancellation signals for timeouts and cancelling CancellationSignal cancellationSignal = CancellationSignal.fromTransport(cancellationSignalTransport); cancellationSignal.setOnCancelListener(() -> { try { - // TODO(b/148264965): this should propagate with the cancellation signal to the - // client - mClientAdapter.error(DataShareWriteAdapter.ERROR_UNKNOWN); + mClientCancellationSignal.cancel(); } catch (RemoteException e) { Slog.e(mTag, "Failed to propagate cancel operation to the caller", e); } @@ -1029,14 +1031,14 @@ public final class ContentCaptureManagerService extends if (!finishedSuccessfully) { try { - mClientAdapter.error(DataShareWriteAdapter.ERROR_UNKNOWN); + mClientCancellationSignal.cancel(); } catch (RemoteException e) { - Slog.e(mTag, "Failed to call error() to client", e); + Slog.e(mTag, "Failed to cancel() the client operation", e); } try { - serviceAdapter.error(DataShareWriteAdapter.ERROR_UNKNOWN); + serviceCancellationSignal.cancel(); } catch (RemoteException e) { - Slog.e(mTag, "Failed to call error() to service", e); + Slog.e(mTag, "Failed to cancel() the service operation", e); } } } |