diff --git a/src/vs/base/common/cancellation.ts b/src/vs/base/common/cancellation.ts index 6797298bd8b..e132d57e5e8 100644 --- a/src/vs/base/common/cancellation.ts +++ b/src/vs/base/common/cancellation.ts @@ -45,8 +45,7 @@ class MutableToken implements CancellationToken { this._isCancelled = true; if (this._emitter) { this._emitter.fire(undefined); - this._emitter.dispose(); - this._emitter = undefined; + this.dispose(); } } } @@ -64,6 +63,13 @@ class MutableToken implements CancellationToken { } return this._emitter.event; } + + public dispose(): void { + if (this._emitter) { + this._emitter.dispose(); + this._emitter = undefined; + } + } } export class CancellationTokenSource { @@ -93,6 +99,13 @@ export class CancellationTokenSource { } dispose(): void { - this.cancel(); + if (!this._token) { + // ensure to initialize with an empty token if we had none + this._token = CancellationToken.None; + + } else if (this._token instanceof MutableToken) { + // actually dispose + this._token.dispose(); + } } } diff --git a/src/vs/vscode.d.ts b/src/vs/vscode.d.ts index c3a4bb0a3f9..d53e5748124 100644 --- a/src/vs/vscode.d.ts +++ b/src/vs/vscode.d.ts @@ -1329,7 +1329,7 @@ declare module 'vscode' { cancel(): void; /** - * Dispose object and free resources. Will call [cancel](#CancellationTokenSource.cancel). + * Dispose object and free resources. */ dispose(): void; }