From f17f3f4cb72d057ab864b2e7dcab132a99bbc644 Mon Sep 17 00:00:00 2001 From: isidor Date: Thu, 12 Sep 2019 16:37:19 +0200 Subject: [PATCH] fix debug UI doesn't cleanup spinners on debug session end fixes #80402 --- .../api/browser/mainThreadDebugService.ts | 1 + .../debug/common/abstractDebugAdapter.ts | 31 ++++++++++--------- 2 files changed, 17 insertions(+), 15 deletions(-) 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 { -- GitLab