diff --git a/packages/frontend/apps/electron/src/main/worker/pool.ts b/packages/frontend/apps/electron/src/main/worker/pool.ts index 63b86323e4..1b8f07637b 100644 --- a/packages/frontend/apps/electron/src/main/worker/pool.ts +++ b/packages/frontend/apps/electron/src/main/worker/pool.ts @@ -23,7 +23,12 @@ export class WorkerManager { workers = new Map< string, - { browserWindow: BrowserWindow; ports: Set; key: string } + { + browserWindow: BrowserWindow; + ports: Set; + key: string; + loaded: PromiseWithResolvers; + } >(); private async getOrCreateWorker(key: string) { @@ -42,6 +47,14 @@ export class WorkerManager { }, show: false, }); + + const record = { + browserWindow: worker, + ports: new Set(), + key, + loaded: Promise.withResolvers(), + }; + let disconnectHelperProcess: (() => void) | null = null; worker.on('closed', () => { this.workers.delete(key); @@ -54,8 +67,9 @@ export class WorkerManager { disconnectHelperProcess = helperProcessManager.connectRenderer( worker.webContents ); + record.loaded.resolve(); }); - const record = { browserWindow: worker, ports: new Set(), key }; + this.workers.set(key, record); return record; } @@ -74,6 +88,8 @@ export class WorkerManager { const { port1: portForWorker, port2: portForRenderer } = new MessageChannelMain(); + await worker.loaded.promise; + worker.browserWindow.webContents.postMessage('worker-connect', { portId }, [ portForWorker, ]);