Comfy-Org / Comfy-Org/ComfyUI_frontend
bug: onNodeChange listener throw silences notifyChange for the same change (canvas dirty missed)
- Dominant language
- TypeScript
- Stars
- 2k
- Forks
- 699
- Avg merge
- 1d 7h
- Merged PRs (30d)
- 490
Description
## Bug
In `src/renderer/core/layout/store/layoutStore.ts`, the microtask flush loop calls `this.notifyNodeChange(queuedChange)` then `this.notifyChange(queuedChange)` without a try/catch around the first call. If any `onNodeChange` listener throws, `notifyChange` for that entry is never called — global `onChange` listeners (including `notifyLayoutChanges` → canvas dirty mark) miss the change entirely.
The `queueGeometryChange` equivalent wraps each listener in try/catch; the `queueChange` flush does not.
## Impact
A single misbehaving node-scoped listener can silently suppress canvas dirty marks, causing stale renders that don't resolve until the next unrelated change.
## Fix
```ts
queuedChanges.forEach((queuedChange) => {
try { this.notifyNodeChange(queuedChange) } catch (e) { console.error(e) }
this.notifyChange(queuedChange)
})
```
_Filed as follow-up from review of #15017 (merged 2026-08-14)._
Contributor guide
Assessment
This issue has not been assessed yet.