"input" variables prevent compound configuration from launching more than one session (#157355)

Fixes #141514
This commit is contained in:
Rob Lourens
2022-08-08 02:20:55 -05:00
committed by GitHub
parent b0895f9fcc
commit f1c5243126
@@ -6,7 +6,7 @@
import * as aria from 'vs/base/browser/ui/aria/aria';
import { Action, IAction } from 'vs/base/common/actions';
import { distinct } from 'vs/base/common/arrays';
import { raceTimeout, RunOnceScheduler } from 'vs/base/common/async';
import { Queue, raceTimeout, RunOnceScheduler } from 'vs/base/common/async';
import { CancellationTokenSource } from 'vs/base/common/cancellation';
import { isErrorWithActions } from 'vs/base/common/errorMessage';
import * as errors from 'vs/base/common/errors';
@@ -825,6 +825,7 @@ export class DebugService implements IDebugService {
return Promise.all(sessions.map(s => disconnect ? s.disconnect(undefined, suspend) : s.terminate()));
}
private variableSubstitutionQueue = new Queue<IConfig | undefined>();
private async substituteVariables(launch: ILaunch | undefined, config: IConfig): Promise<IConfig | undefined> {
const dbg = this.adapterManager.getDebugger(config.type);
if (dbg) {
@@ -838,7 +839,8 @@ export class DebugService implements IDebugService {
}
}
try {
return await dbg.substituteVariables(folder, config);
// Variable substitution can require user interaction, so only one of these should be running at a time.
return this.variableSubstitutionQueue.queue(() => dbg.substituteVariables(folder, config));
} catch (err) {
this.showError(err.message, undefined, !!launch?.getConfiguration(config.name));
return undefined; // bail out