From 950337d9e4edbb119dec344b14597bd5ab8a7627 Mon Sep 17 00:00:00 2001 From: abose Date: Fri, 13 Feb 2026 16:10:01 +0530 Subject: [PATCH] fix: live preview related document handling and editor event leak threshold Fix null liveDoc access when a related document is not found, guard against duplicate StylesheetAdded race, use consistent url key, and raise active-editor-changed leak threshold to 50. --- src/LiveDevelopment/LiveDevMultiBrowser.js | 18 +++++++++++------- src/editor/EditorManager.js | 2 +- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/LiveDevelopment/LiveDevMultiBrowser.js b/src/LiveDevelopment/LiveDevMultiBrowser.js index 93a1ae6740..50f3e9bd90 100644 --- a/src/LiveDevelopment/LiveDevMultiBrowser.js +++ b/src/LiveDevelopment/LiveDevMultiBrowser.js @@ -189,15 +189,14 @@ define(function (require, exports, module) { * @param {string} url Absolute URL of the related document */ function _handleRelatedDocumentDeleted(url) { - var liveDoc = _relatedDocuments[url]; + const liveDoc = _relatedDocuments[url]; if (liveDoc) { delete _relatedDocuments[url]; + if (_server) { + _server.remove(liveDoc); + } + _closeDocument(liveDoc); } - - if (_server) { - _server.remove(liveDoc); - } - _closeDocument(liveDoc); } /** @@ -313,12 +312,17 @@ define(function (require, exports, module) { var docPromise = DocumentManager.getDocumentForPath(path); docPromise.done(function (doc) { + // Re-check after async gap: another StylesheetAdded event may have + // already created a live document for this URL while we were waiting. + if (_relatedDocuments[url]) { + return; + } if ((_classForDocument(doc) === LiveCSSDocument) && (!_liveDocument || (doc !== _liveDocument.doc))) { var liveDoc = _createLiveDocument(doc, doc._masterEditor, roots); if (liveDoc) { _server.add(liveDoc); - _relatedDocuments[doc.url] = liveDoc; + _relatedDocuments[url] = liveDoc; liveDoc.on("updateDoc", function (event, url) { var path = _server.urlToPath(url), doc = getLiveDocForPath(path); diff --git a/src/editor/EditorManager.js b/src/editor/EditorManager.js index 40f9d30092..4dd00f2807 100644 --- a/src/editor/EditorManager.js +++ b/src/editor/EditorManager.js @@ -775,7 +775,7 @@ define(function (require, exports, module) { // Set up event dispatching EventDispatcher.makeEventDispatcher(exports); - EventDispatcher.setLeakThresholdForEvent(EVENT_ACTIVE_EDITOR_CHANGED, 30); + EventDispatcher.setLeakThresholdForEvent(EVENT_ACTIVE_EDITOR_CHANGED, 50); // File-based preferences handling exports.on(EVENT_ACTIVE_EDITOR_CHANGED, function (e, current) {