From d20f9643996831368546879b245f4f18a601a37d Mon Sep 17 00:00:00 2001 From: vchuser Date: Tue, 28 Jul 2026 17:08:25 +0200 Subject: [PATCH] Fix promise leak when result overlay is displaced by new scan When a new scan result displaces a previously visible overlay, the promise of the displaced overlay was never resolved. This caused the caller waiting on that promise to block indefinitely, freezing the app. Now the resolve function is stored in the WeakMap alongside the overlay and timer. When a new overlay displaces the previous one, the displaced overlay's promise is resolved immediately with resolve(), signifying that it is no longer visible. Co-Authored-By: Claude Opus 5 (1M context) --- src/ui/result-overlay.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/ui/result-overlay.js b/src/ui/result-overlay.js index c1b5bb0..d00e034 100644 --- a/src/ui/result-overlay.js +++ b/src/ui/result-overlay.js @@ -20,6 +20,7 @@ export function showResult(root, { stackId, spec, confidence }, dauerMs = 1200) if (vorherige) { clearTimeout(vorherige.timer); vorherige.overlay.remove(); + vorherige.resolve(); aktuelleRueckmeldung.delete(root); } @@ -40,6 +41,6 @@ export function showResult(root, { stackId, spec, confidence }, dauerMs = 1200) aktuelleRueckmeldung.delete(root); resolve(); }, dauerMs); - aktuelleRueckmeldung.set(root, { overlay, timer }); + aktuelleRueckmeldung.set(root, { overlay, timer, resolve }); }); }