Two overlapping /diffusion/start requests can interleave between the is_active() check and the reservation, so reserve() itself must reject a second reservation atomically. Otherwise both callers reserve, both free the GPU's resident chat or image model, and the loser only 409s after the eviction -- the evict-then-fail the reservation exists to prevent. reserve() now raises under the lock if a start is already reserved or a job is already running. |
||
|---|---|---|
| .. | ||
| assets | ||
| auth | ||
| core | ||
| hub | ||
| loggers | ||
| models | ||
| plugins | ||
| requirements | ||
| routes | ||
| state | ||
| storage | ||
| tests | ||
| utils | ||
| __init__.py | ||
| _platform_compat.py | ||
| cloudflare_tunnel.py | ||
| colab.py | ||
| main.py | ||
| run.py | ||
| startup_banner.py | ||