mirror of
https://github.com/storytold/lightcraft.git
synced 2026-10-25 02:30:15 -06:00
A panic inside RenderJob::run or QuickJob::run (a raw decoder or pipeline bug) unwound the job pool's worker without sending a result. The slot stayed pending and its key was never asked for again, so the loupe or the thumbnail rendered forever; and the pool never replaces a dead worker, so after as many such panics as it has workers (2–6) no photo rendered until LightCraft was restarted. Both now catch the panic (guard::catch) and return it as the job's failure, answering the request it came from, so the renderer records it like any failed render: no retry until the catalog changes, and the workers live on. run() is the one place every render goes through (the pool, export, Build Previews, contact sheets, face and AI-mask workers); callers that had their own guard keep working, and the watermark preview's, now redundant, is gone. The web build aborts on panic, so nothing changes there. Co-Authored-By: Claude <noreply@anthropic.com>