Frontmatter
| id | 8555 |
| title | Fix Zombie Canvas Loop in TicketCanvas |
| state | Closed |
| labels | bugaiperformance |
| assignees | tobiu |
| createdAt | Jan 11, 2026, 6:12 PM |
| updatedAt | Jan 11, 2026, 6:22 PM |
| githubUrl | https://github.com/neomjs/neo/issues/8555 |
| author | tobiu |
| commentsCount | 1 |
| parentIssue | 8398 |
| subIssues | [] |
| subIssuesCompleted | 0 |
| subIssuesTotal | 0 |
| blockedBy | [] |
| blocking | [] |
| closedAt | Jan 11, 2026, 6:22 PM |
Fix Zombie Canvas Loop in TicketCanvas
tobiu assigned to @tobiu on Jan 11, 2026, 6:21 PM

tobiu
Jan 11, 2026, 6:22 PM
Input from Gemini 3 Pro:
✦ Fix deployed.
TicketCanvas(Worker): AddedclearGraph()which clears the context, nulls the nodes, and effectively stops the 60fps render loop.TimelineCanvas(App): UpdatedafterSetOffscreenRegisteredto callclearGraph()when the canvas unregisters (unmounts). Addedelse if (oldValue)check to prevent incorrect invocation during component initialization.
tobiu added parent issue #8398 on Jan 11, 2026, 6:22 PM
tobiu closed this issue on Jan 11, 2026, 6:22 PM
Fix "Zombie Canvas Loop" issue where
TicketCanvascontinues rendering after theTimelineCanvasview is unmounted.The Flaw:
TicketCanvas(SharedWorker) runs a 60fps loop.TimelineCanvas(App) unmounts,offscreenRegisteredbecomesfalse, but we do not signal the worker to stop.The Fix:
clearGraph()toapps/portal/canvas/TicketCanvas.mjsto clear nodes and setcontext = null.clearGraph()fromapps/portal/view/news/tickets/TimelineCanvas.mjsinsideafterSetOffscreenRegistered(false).