From 376c52b955428d205459bea6619fc161fc8faacf Mon Sep 17 00:00:00 2001 From: isidor Date: Thu, 8 Jun 2017 00:28:24 +0200 Subject: [PATCH] fixes #28198 --- .../workbench/parts/debug/common/debugModel.ts | 6 +++--- .../parts/debug/electron-browser/debugViewer.ts | 16 ++++++++-------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/vs/workbench/parts/debug/common/debugModel.ts b/src/vs/workbench/parts/debug/common/debugModel.ts index 6d4f7691c3e..fa0229453bd 100644 --- a/src/vs/workbench/parts/debug/common/debugModel.ts +++ b/src/vs/workbench/parts/debug/common/debugModel.ts @@ -435,17 +435,17 @@ export class Thread implements IThread { * Only fetches the first stack frame for performance reasons. Calling this method consecutive times * gets the remainder of the call stack. */ - public fetchCallStack(): TPromise { + public fetchCallStack(smartFetch = true): TPromise { if (!this.stopped) { return TPromise.as(null); } - if (!this.fetchPromise) { + if (!this.fetchPromise && smartFetch) { this.fetchPromise = this.getCallStackImpl(0, 1).then(callStack => { this.callStack = callStack || []; }); } else { - this.fetchPromise = this.fetchPromise.then(() => this.getCallStackImpl(this.callStack.length, 20).then(callStackSecondPart => { + this.fetchPromise = (this.fetchPromise || TPromise.as(null)).then(() => this.getCallStackImpl(this.callStack.length, 20).then(callStackSecondPart => { this.callStack = this.callStack.concat(callStackSecondPart); })); } diff --git a/src/vs/workbench/parts/debug/electron-browser/debugViewer.ts b/src/vs/workbench/parts/debug/electron-browser/debugViewer.ts index 2d8ac9308df..259e9154d6a 100644 --- a/src/vs/workbench/parts/debug/electron-browser/debugViewer.ts +++ b/src/vs/workbench/parts/debug/electron-browser/debugViewer.ts @@ -354,7 +354,7 @@ export class CallStackDataSource implements IDataSource { public getChildren(tree: ITree, element: any): TPromise { if (element instanceof Thread) { - return TPromise.as(this.getThreadChildren(element)); + return this.getThreadChildren(element); } if (element instanceof Model) { return TPromise.as(element.getProcesses()); @@ -364,25 +364,25 @@ export class CallStackDataSource implements IDataSource { return TPromise.as(process.getAllThreads()); } - private getThreadChildren(thread: Thread): any[] { + private getThreadChildren(thread: Thread): TPromise { const callStack: any[] = thread.getCallStack(); - if (!callStack) { - return []; + if (!callStack || !callStack.length) { + return thread.fetchCallStack(false).then(() => thread.getCallStack()); } if (callStack.length === 1) { // To reduce flashing of the call stack view simply append the stale call stack // once we have the correct data the tree will refresh and we will no longer display it. - return callStack.concat(thread.getStaleCallStack().slice(1)); + return TPromise.as(callStack.concat(thread.getStaleCallStack().slice(1))); } if (thread.stoppedDetails && thread.stoppedDetails.framesErrorMessage) { - return callStack.concat([thread.stoppedDetails.framesErrorMessage]); + return TPromise.as(callStack.concat([thread.stoppedDetails.framesErrorMessage])); } if (thread.stoppedDetails && thread.stoppedDetails.totalFrames > callStack.length && callStack.length > 1) { - return callStack.concat([new ThreadAndProcessIds(thread.process.getId(), thread.threadId)]); + return TPromise.as(callStack.concat([new ThreadAndProcessIds(thread.process.getId(), thread.threadId)])); } - return callStack; + return TPromise.as(callStack); } public getParent(tree: ITree, element: any): TPromise { -- GitLab