Merge "Ensure we clear mPackagesWithShareRequests when a remote exception happens at write() or start()." into sc-qpr1-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
7207d8d032
@@ -1072,26 +1072,18 @@ public final class ContentCaptureManagerService extends
|
|||||||
ParcelFileDescriptor sourceOut = servicePipe.second;
|
ParcelFileDescriptor sourceOut = servicePipe.second;
|
||||||
ParcelFileDescriptor sinkOut = servicePipe.first;
|
ParcelFileDescriptor sinkOut = servicePipe.first;
|
||||||
|
|
||||||
|
synchronized (mParentService.mLock) {
|
||||||
mParentService.mPackagesWithShareRequests.add(mDataShareRequest.getPackageName());
|
mParentService.mPackagesWithShareRequests.add(mDataShareRequest.getPackageName());
|
||||||
|
|
||||||
try {
|
|
||||||
mClientAdapter.write(sourceIn);
|
|
||||||
} catch (RemoteException e) {
|
|
||||||
Slog.e(TAG, "Failed to call write() the client operation", e);
|
|
||||||
sendErrorSignal(mClientAdapter, serviceAdapter,
|
|
||||||
ContentCaptureManager.DATA_SHARE_ERROR_UNKNOWN);
|
|
||||||
logServiceEvent(
|
|
||||||
CONTENT_CAPTURE_SERVICE_EVENTS__EVENT__DATA_SHARE_ERROR_CLIENT_PIPE_FAIL);
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
try {
|
|
||||||
serviceAdapter.start(sinkOut);
|
if (!setUpSharingPipeline(mClientAdapter, serviceAdapter, sourceIn, sinkOut)) {
|
||||||
} catch (RemoteException e) {
|
|
||||||
Slog.e(TAG, "Failed to call start() the service operation", e);
|
|
||||||
sendErrorSignal(mClientAdapter, serviceAdapter,
|
sendErrorSignal(mClientAdapter, serviceAdapter,
|
||||||
ContentCaptureManager.DATA_SHARE_ERROR_UNKNOWN);
|
ContentCaptureManager.DATA_SHARE_ERROR_UNKNOWN);
|
||||||
logServiceEvent(
|
bestEffortCloseFileDescriptors(sourceIn, sinkIn, sourceOut, sinkOut);
|
||||||
CONTENT_CAPTURE_SERVICE_EVENTS__EVENT__DATA_SHARE_ERROR_SERVICE_PIPE_FAIL);
|
synchronized (mParentService.mLock) {
|
||||||
|
mParentService.mPackagesWithShareRequests
|
||||||
|
.remove(mDataShareRequest.getPackageName());
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1184,6 +1176,32 @@ public final class ContentCaptureManagerService extends
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean setUpSharingPipeline(
|
||||||
|
IDataShareWriteAdapter clientAdapter,
|
||||||
|
IDataShareReadAdapter serviceAdapter,
|
||||||
|
ParcelFileDescriptor sourceIn,
|
||||||
|
ParcelFileDescriptor sinkOut) {
|
||||||
|
try {
|
||||||
|
clientAdapter.write(sourceIn);
|
||||||
|
} catch (RemoteException e) {
|
||||||
|
Slog.e(TAG, "Failed to call write() the client operation", e);
|
||||||
|
logServiceEvent(
|
||||||
|
CONTENT_CAPTURE_SERVICE_EVENTS__EVENT__DATA_SHARE_ERROR_CLIENT_PIPE_FAIL);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
serviceAdapter.start(sinkOut);
|
||||||
|
} catch (RemoteException e) {
|
||||||
|
Slog.e(TAG, "Failed to call start() the service operation", e);
|
||||||
|
logServiceEvent(
|
||||||
|
CONTENT_CAPTURE_SERVICE_EVENTS__EVENT__DATA_SHARE_ERROR_SERVICE_PIPE_FAIL);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
private void enforceDataSharingTtl(ParcelFileDescriptor sourceIn,
|
private void enforceDataSharingTtl(ParcelFileDescriptor sourceIn,
|
||||||
ParcelFileDescriptor sinkIn,
|
ParcelFileDescriptor sinkIn,
|
||||||
ParcelFileDescriptor sourceOut,
|
ParcelFileDescriptor sourceOut,
|
||||||
|
|||||||
Reference in New Issue
Block a user