Skip to content

Commit 23e5ef1

Browse files
author
Loïc Mangeonjean
committed
fix: wait for services to be ready before registering extensions
1 parent 6a4e1fa commit 23e5ef1

File tree

2 files changed

+13
-4
lines changed

2 files changed

+13
-4
lines changed

src/extensions.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import type * as vscode from 'vscode'
22
import { ExtensionType, IExtension, IExtensionContributions, IExtensionManifest, TargetPlatform } from 'vs/platform/extensions/common/extensions'
33
import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions'
44
import { URI } from 'vs/base/common/uri'
5-
import { StandaloneServices } from 'vs/editor/standalone/browser/standaloneServices'
65
import { getExtensionId } from 'vs/platform/extensionManagement/common/extensionManagementUtil'
76
import { DisposableStore, IDisposable } from 'vs/base/common/lifecycle'
87
import { ITranslations, localizeManifest } from 'vs/platform/extensionManagement/common/extensionNls'
@@ -13,6 +12,7 @@ import { ExtensionHostKind } from 'vs/workbench/services/extensions/common/exten
1312
import { IExtensionWithExtHostKind, SimpleExtensionService, getLocalExtHostExtensionService } from './service-override/extensions'
1413
import { registerExtensionFile } from './service-override/files'
1514
import { setDefaultApi } from './api'
15+
import { getService } from './services'
1616

1717
const defaultApiInitializeBarrier = new Barrier()
1818
export async function initialize (): Promise<void> {
@@ -60,7 +60,7 @@ async function deltaExtensions (toAdd: IExtensionWithExtHostKind[], toRemove: IE
6060
_toRemove.push(...toRemove)
6161

6262
if (lastPromise == null) {
63-
const extensionService = StandaloneServices.get(IExtensionService) as SimpleExtensionService
63+
const extensionService = await getService(IExtensionService) as SimpleExtensionService
6464
lastPromise = new Promise(resolve => setTimeout(resolve)).then(async () => {
6565
await extensionService.deltaExtensions(_toAdd, _toRemove)
6666
_toAdd = []

src/services.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ import { Registry } from 'vs/platform/registry/common/platform'
77
import { IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions } from 'vs/workbench/common/contributions'
88
import { IEditorOverrideServices, StandaloneServices } from 'vs/editor/standalone/browser/standaloneServices'
99
import { ILifecycleService, LifecyclePhase } from 'vs/workbench/services/lifecycle/common/lifecycle'
10-
import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'
11-
import { RunOnceScheduler, runWhenIdle } from 'vs/base/common/async'
10+
import { IInstantiationService, ServiceIdentifier, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'
11+
import { Barrier, RunOnceScheduler, runWhenIdle } from 'vs/base/common/async'
1212
import { Emitter } from 'vs/base/common/event'
1313
import { IAction } from 'vs/base/common/actions'
1414
import getLayoutServiceOverride from './service-override/layout'
@@ -46,9 +46,18 @@ async function initServices (overrides: IEditorOverrideServices): Promise<IInsta
4646
const renderWorkbenchEmitter = new Emitter<ServicesAccessor>()
4747
export const onRenderWorkbench = renderWorkbenchEmitter.event
4848

49+
const serviceInitializedBarrier = new Barrier()
50+
51+
export async function getService<T> (identifier: ServiceIdentifier<T>): Promise<T> {
52+
await serviceInitializedBarrier.wait()
53+
return StandaloneServices.get(identifier)
54+
}
55+
4956
export async function initialize (overrides: IEditorOverrideServices): Promise<void> {
5057
const instantiationService = await initServices(overrides)
5158

59+
serviceInitializedBarrier.open()
60+
5261
instantiationService.invokeFunction(accessor => {
5362
const lifecycleService = accessor.get(ILifecycleService)
5463

0 commit comments

Comments
 (0)