fix(webui): guard app-detail listener binds against per-navigation leak
AppTabbedManager.initialize() re-runs on every /app navigation (its 'initialized' flag is never set true), and setupURLMonitoring() / setupTaskEventListeners() add window listeners (popstate, taskCreated/ Completed/Updated) unguarded — so each app-detail visit stacked another listener set. Bind them once via a _listenersWired flag (mirrors the existing _watchdogStarted guard). Pre-existing leak surfaced by the feature-migration review. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Signed-off-by: librelad <librelad@digitalangels.vip>
This commit is contained in:
parent
ac9f2bf767
commit
d7ac865b98
@ -708,11 +708,16 @@ class AppTabbedManager {
|
||||
this.switchTab('tasks');
|
||||
}
|
||||
|
||||
// Monitor URL changes for app navigation
|
||||
// Monitor URL changes for app navigation + listen for task events. These
|
||||
// add window-level listeners (popstate, taskCreated/Completed/Updated), so
|
||||
// bind them ONCE for the lifetime of this singleton — initialize() re-runs
|
||||
// on every /app navigation (the `initialized` flag is never set true), and
|
||||
// without this guard each visit stacked another set of window listeners.
|
||||
if (!this._listenersWired) {
|
||||
this._listenersWired = true;
|
||||
this.setupURLMonitoring();
|
||||
|
||||
// Listen for task creation events
|
||||
this.setupTaskEventListeners();
|
||||
}
|
||||
|
||||
// Set initial active tab (only if no task parameter)
|
||||
if (!taskId) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user