Skip to content

chore(UI): signal leak epidemic — 114 connects vs 6 disconnects #256

@niyazmft

Description

@niyazmft

Summary

A project-wide audit found 114 .connect() calls across .gd files and only 6 .disconnect() calls (all in EntityVisualProxy). Most UI nodes connect to signals in _ready() but never disconnect in _exit_tree(), causing dangling callbacks when nodes are freed.

Affected Files (non-autoload)

File Connections Disconnections
scripts/ui/settings_panel.gd 15+ 0
scripts/ui/combat_hud.gd 2 (SafeZoneManager) 0
scripts/ui/remap_panel.gd 3 0
scripts/ui/settings_menu.gd 1 0
scripts/entities/burden_visuals.gd 1 (BurdenManager) 0

Autoloads (e.g., SafeZoneManager, ToastManager, BurdenShaderManager) are exempt — they live for the full session.

Impact

Suggested Fix

Add _exit_tree() to each affected file that disconnects its own signals. Use is_connected() guards:

func _exit_tree() -> void:
    if signal_name.is_connected(handler_name):
        signal_name.disconnect(handler_name)

Related

Priority: P2 · Size: M · Status: Ready

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingjulesGating label for Google Jules offload

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions