stream_command used a blocking proc.stdout.readline() that never woke when the underlying journalctl was silent, so Flask never delivered GeneratorExit on client disconnect — the worker thread and the journalctl child both leaked permanently and pinned the gunicorn thread pool. Switch to a select-based read loop with a 15s heartbeat tick (yielded as ""), and translate the tick to an SSE keepalive comment in the log route. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| __init__.py | ||
| auth_routes.py | ||
| blueprint_routes.py | ||
| job_routes.py | ||
| log_routes.py | ||
| overlay_routes.py | ||
| page_routes.py | ||
| server_routes.py | ||
| workshop_routes.py | ||