ComfyUI/comfy_execution
Matt Miller 22b25fcd26 fix: make job cancel atomic and best-effort
Addresses two cancel races/edges raised in review.

Targeted, atomic interrupt. cancel_job's interrupt callback now takes the
prompt id and returns whether it fired; the single-cancel route backs it
with the new PromptQueue.interrupt_if_running, which checks the running set
and signals the interrupt under the queue mutex. This closes the TOCTOU
where a pending job that starts executing between the snapshot and dequeue
(or a running job that finishes between the snapshot and interrupt) could be
missed or, worse, cause an unrelated prompt to be interrupted. The per-prompt
interrupt-flag reset in execute_async keeps a finished job from leaking the
interrupt onto its successor.

Best-effort batch cancel. POST /api/jobs/cancel no longer fails the whole
batch with 404 when one id is unknown/finished; such ids are treated as
no-ops, so "cancel all" still cancels the in-progress jobs even if some
finished between the client's snapshot and the request. Malformed ids are
still rejected with 400.
2026-06-19 16:18:39 -07:00
..
asset_enrichment.py feat(assets): include asset id in executed WebSocket message (#13862) 2026-06-10 17:04:52 -07:00
cache_provider.py Revert "Revert "feat: Add CacheProvider API for external distributed caching"" (#12915) 2026-03-12 21:17:50 -07:00
caching.py dynamicVRAM + --cache-ram 2 (CORE-117) (#13603) 2026-04-28 19:15:02 -04:00
graph_utils.py V3 Node Schema Definition - initial (#8656) 2025-07-31 18:02:12 -04:00
graph.py Remove useless annotations imports. (#14105) 2026-05-25 19:23:29 -07:00
jobs.py fix: make job cancel atomic and best-effort 2026-06-19 16:18:39 -07:00
progress.py Remove useless annotations imports. (#14105) 2026-05-25 19:23:29 -07:00
utils.py Support for async node functions (#8830) 2025-07-10 14:46:19 -04:00
validation.py Remove useless annotations imports. (#14105) 2026-05-25 19:23:29 -07:00