From 36f56bf02378cfac6cf79582bb9b87f249a18c01 Mon Sep 17 00:00:00 2001 From: Tobias Ortmayr Date: Thu, 22 Sep 2022 16:41:13 +0200 Subject: [PATCH] 11685: Restore cancellation token behavior Ensure that cancelling an RPC call does not result in an automatic rejection on the calling side. Instead the token is passed to the receiving side and handed there. This restores the cancellation strategy that was used with the old json-rpc architecture (prior to 1.28) Contributed on behalf of STMicroelectronics. Fixes #11685 --- packages/core/src/common/message-rpc/rpc-protocol.ts | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/packages/core/src/common/message-rpc/rpc-protocol.ts b/packages/core/src/common/message-rpc/rpc-protocol.ts index 6dfdbb125dad9..ce96bdaaab781 100644 --- a/packages/core/src/common/message-rpc/rpc-protocol.ts +++ b/packages/core/src/common/message-rpc/rpc-protocol.ts @@ -132,15 +132,11 @@ export class RpcProtocol { // The last element of the request args might be a cancellation token. As these tokens are not serializable we have to remove it from the // args array and the `CANCELLATION_TOKEN_KEY` string instead. const cancellationToken: CancellationToken | undefined = args.length && CancellationToken.is(args[args.length - 1]) ? args.pop() : undefined; - if (cancellationToken && cancellationToken.isCancellationRequested) { - return Promise.reject(this.cancelError()); - } if (cancellationToken) { args.push(RpcProtocol.CANCELLATION_TOKEN_KEY); cancellationToken.onCancellationRequested(() => { this.sendCancel(id); - this.pendingRequests.get(id)?.reject(this.cancelError()); } ); } @@ -164,12 +160,6 @@ export class RpcProtocol { output.commit(); } - cancelError(): Error { - const error = new Error('"Request has already been canceled by the sender"'); - error.name = 'Cancel'; - return error; - } - protected handleCancel(id: number): void { const cancellationTokenSource = this.cancellationTokenSources.get(id); if (cancellationTokenSource) {