From 5a36494bc3cb4369c8a858a947530b37507a5372 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Thu, 18 Feb 2021 09:38:10 -0500 Subject: [PATCH] add lock around lensViews in initView Signed-off-by: Sebastian Malton --- src/renderer/components/cluster-manager/lens-views.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/renderer/components/cluster-manager/lens-views.ts b/src/renderer/components/cluster-manager/lens-views.ts index 30fae018cc..e49d473e65 100644 --- a/src/renderer/components/cluster-manager/lens-views.ts +++ b/src/renderer/components/cluster-manager/lens-views.ts @@ -2,6 +2,7 @@ import { observable, when } from "mobx"; import { ClusterId, ClusterStore, getClusterFrameUrl } from "../../../common/cluster-store"; import { getMatchedClusterId } from "../../navigation"; import logger from "../../../main/logger"; +import AwaitLock from "await-lock"; export interface LensView { isLoaded?: boolean @@ -10,21 +11,20 @@ export interface LensView { } export const lensViews = observable.map(); +const lensViewsLock = new AwaitLock(); export function hasLoadedView(clusterId: ClusterId): boolean { return !!lensViews.get(clusterId)?.isLoaded; } export async function initView(clusterId: ClusterId) { + await lensViewsLock.acquireAsync(); + if (!clusterId || lensViews.has(clusterId)) { return; } const cluster = ClusterStore.getInstance().getById(clusterId); - if (!cluster) { - return; - } - logger.info(`[LENS-VIEW]: init dashboard, clusterId=${clusterId}`); const parentElem = document.getElementById("lens-views"); const iframe = document.createElement("iframe"); @@ -39,6 +39,7 @@ export async function initView(clusterId: ClusterId) { parentElem.appendChild(iframe); logger.info(`[LENS-VIEW]: waiting cluster to be ready, clusterId=${clusterId}`); await cluster.whenReady; + lensViewsLock.release(); await autoCleanOnRemove(clusterId, iframe); }