diff --git a/src/vs/workbench/api/browser/mainThreadDebugService.ts b/src/vs/workbench/api/browser/mainThreadDebugService.ts index 721187994a6..3b49ec144f5 100644 --- a/src/vs/workbench/api/browser/mainThreadDebugService.ts +++ b/src/vs/workbench/api/browser/mainThreadDebugService.ts @@ -378,6 +378,7 @@ class ExtensionHostDebugAdapter extends AbstractDebugAdapter { } public stopSession(): Promise { + this.cancelPending(); return Promise.resolve(this._proxy.$stopDASession(this._handle)); } } diff --git a/src/vs/workbench/contrib/debug/common/abstractDebugAdapter.ts b/src/vs/workbench/contrib/debug/common/abstractDebugAdapter.ts index 74d087e06b7..5d01d78a039 100644 --- a/src/vs/workbench/contrib/debug/common/abstractDebugAdapter.ts +++ b/src/vs/workbench/contrib/debug/common/abstractDebugAdapter.ts @@ -5,6 +5,7 @@ import { Emitter, Event } from 'vs/base/common/event'; import { IDebugAdapter } from 'vs/workbench/contrib/debug/common/debug'; +import { timeout } from 'vs/base/common/async'; /** * Abstract implementation of the low level API for a debug adapter. @@ -136,22 +137,22 @@ export abstract class AbstractDebugAdapter implements IDebugAdapter { this.sendMessage(message); } - protected cancelPending() { - const pending = this.pendingRequests; + async cancelPending(): Promise { + const pending = new Map void>(); + this.pendingRequests.forEach((value, key) => pending.set(key, value)); this.pendingRequests.clear(); - setTimeout(_ => { - pending.forEach((callback, request_seq) => { - const err: DebugProtocol.Response = { - type: 'response', - seq: 0, - request_seq, - success: false, - command: 'canceled', - message: 'canceled' - }; - callback(err); - }); - }, 1000); + await timeout(1000); + pending.forEach((callback, request_seq) => { + const err: DebugProtocol.Response = { + type: 'response', + seq: 0, + request_seq, + success: false, + command: 'canceled', + message: 'canceled' + }; + callback(err); + }); } dispose(): void {