Skip to content

Commit 0f783b5

Browse files
authored
prevent task / extension activation deadlock (microsoft#176298)
1 parent e98fd12 commit 0f783b5

File tree

1 file changed

+9
-4
lines changed

1 file changed

+9
-4
lines changed

src/vs/workbench/contrib/tasks/browser/abstractTaskService.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ import { IPreferencesService } from 'vs/workbench/services/preferences/common/pr
8282
import { TerminalExitReason } from 'vs/platform/terminal/common/terminal';
8383
import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService';
8484
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
85+
import { timeout } from 'vs/base/common/async';
8586

8687
const QUICKOPEN_HISTORY_LIMIT_CONFIG = 'task.quickOpen.history';
8788
const PROBLEM_MATCHER_NEVER_CONFIG = 'task.problemMatchers.neverPrompt';
@@ -574,10 +575,14 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
574575
// We need to first wait for extensions to be registered because we might read
575576
// the `TaskDefinitionRegistry` in case `type` is `undefined`
576577
await this._extensionService.whenInstalledExtensionsRegistered();
577-
578-
await Promise.all(
579-
this._getActivationEvents(type).map(activationEvent => this._extensionService.activateByEvent(activationEvent))
580-
);
578+
// Wait for the first of either to resolve
579+
await Promise.race([
580+
// Create a promise that resolves when all activation promises resolve
581+
Promise.all(
582+
this._getActivationEvents(type).map(activationEvent => this._extensionService.activateByEvent(activationEvent))
583+
),
584+
timeout(5000).then(() => console.warn('Timed out activating extensions for task providers'))
585+
]);
581586
}
582587

583588
private _updateSetup(setup?: [IWorkspaceFolder[], IWorkspaceFolder[], ExecutionEngine, JsonSchemaVersion, IWorkspace | undefined]): void {

0 commit comments

Comments
 (0)