Three more code paths were bypassing the _meta_lock guard and firing
raw yt-dlp processes concurrently with active downloads:
- Popular fetch Phase 1 (flat-playlist channel crawl): changed from
ytdlp._run to ytdlp._meta_run so it waits for active downloads
- download_subs_only: changed from _run to _meta_run
- fetch_video_comments: returns empty list immediately if a download
is active (avoids blocking a 90s call indefinitely)
- Diagnostic test endpoint (settings): switched to _meta_run
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>