mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-07-09 08:38:13 +00:00
## Summary Various race conditions can cause `NullGraphError` to be thrown after removing/converting a subgraph. This fix guards at call sites and refactors to add a pre-removal phase before the graph is nulled. ## Changes - **What**: - add pre-detach event (node:before-removed) so reactive consumers can drop references before node.graph is nulled - move selection and Vue node-manager teardown to this event to eliminate stale panel/render evaluations against detached nodes - guard SubgraphNode promoted-widget paths resilient on detached access and add regression coverage - **Breaking**: <!-- Any breaking changes (if none, remove this line) --> - **Dependencies**: <!-- New dependencies (if none, remove this line) --> ## Review Focus Alternative considered approach: - Guards: Guards were treating the symptom at every caller, and new callers may appear that won't know about this edge case. Adding a new hook for consumers to drop refs is safer than trying to guard every call site - the ones that are left in are safetynets and not the primary fix. - Large scale refactor (towards ADR0008) - requires additional scaffolding to already be in place to implement effectively, this fix simply adds a new hook and isnt incompatible with the projects future goals - Defer/remove/reorder graph null - The detach was explicitly added in #8180 to ensure GC - delaying is fragile and may not resolve the issue, difficult to prove and may surface a new race condition - Make rootGraph nullable - would require 100s of references to be updated, when `NullGraphError` was added in #8180 to throw a clear message when the graph for a removed subgraph node was referenced, potentially leading to other harder to track bugs without the exception Tests: - e2e test complexity is required to prove the issue happens, patching calls to add artificial delays. This isn't great, but I could not find a reliable way to recreate otherwise, unless we are happy to drop e2e and keep only unit tests. ┆Issue is synchronized with this [Notion page](https://app.notion.com/p/PR-11804-fix-prevent-NullGraphError-on-subgraph-node-removal-3536d73d3650814e9183e17067cc0992) by [Unito](https://www.unito.io) --------- Co-authored-by: Alexander Brown <drjkl@comfy.org> Co-authored-by: DrJKL <DrJKL0424@gmail.com>