diff options
author | Sergey Volnov <volnov@google.com> | 2020-01-27 15:24:41 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2020-01-27 15:24:41 +0000 |
commit | ed8ce564b39924c10c4fff6caf253f39f884c42f (patch) | |
tree | 643cc44778c5d2f5ed815893e719f02bf9ac8271 /services/contentcapture | |
parent | 85ca06ebbfa1788d15c6c3fbf9503748dc5664b3 (diff) | |
parent | d7e984444503b5d1bcaed9fb9c914651f80616f4 (diff) |
Merge "Use cancellation signals for timeouts and cancel-by-CCService operations"
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 9245a1da43b2..efa127be706b 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); } } } |