diff --git a/src/vs/workbench/services/extensions/electron-browser/extensionHost.ts b/src/vs/workbench/services/extensions/electron-browser/extensionHost.ts index 3ecc472ed73aeae72619138c9021bf0c5d39c5b6..40f4158fd3c6879fb98817ea919a268a49f84403 100644 --- a/src/vs/workbench/services/extensions/electron-browser/extensionHost.ts +++ b/src/vs/workbench/services/extensions/electron-browser/extensionHost.ts @@ -362,22 +362,38 @@ export class ExtensionHostProcessWorker implements IExtensionHostStarter { // 2) wait for the incoming `initialized` event. return new Promise((resolve, reject) => { - let handle = setTimeout(() => { - reject('timeout'); - }, 60 * 1000); + let timeoutHandle: NodeJS.Timer; + const installTimeoutCheck = () => { + timeoutHandle = setTimeout(() => { + reject('timeout'); + }, 60 * 1000); + }; + const uninstallTimeoutCheck = () => { + clearTimeout(timeoutHandle); + }; + + // Wait 60s for the ready message + installTimeoutCheck(); const disposable = protocol.onMessage(msg => { if (isMessageOfType(msg, MessageType.Ready)) { // 1) Extension Host is ready to receive messages, initialize it - this._createExtHostInitData().then(data => protocol.send(Buffer.from(JSON.stringify(data)))); + uninstallTimeoutCheck(); + + this._createExtHostInitData().then(data => { + + // Wait 60s for the initialized message + installTimeoutCheck(); + + protocol.send(Buffer.from(JSON.stringify(data))); + }); return; } if (isMessageOfType(msg, MessageType.Initialized)) { // 2) Extension Host is initialized - - clearTimeout(handle); + uninstallTimeoutCheck(); // stop listening for messages here disposable.dispose();