/
/
# What does this implement/fix? Pausing an external source (Spotify Connect) left the audio process that reads the capture pipe running, and the cleanup that eventually stopped it took a fixed 12 seconds. That cleanup runs while the player is locked, so pressing play again shortly after a pause could sit waiting for several seconds before anything happened. When a stream ends normally we still drain the audio process, so no trailing audio is lost. When it ends because it was stopped or ran into an error, the process is blocked on input that will never arrive again — draining it only waits out three timeouts before the kill that was always coming, so it is now stopped straight away. - Stop draining ffmpeg's pipes when a stream ends by teardown or error, and kill it instead. A clean end still drains as before. - Correct the Soloist notes: the capture sink only produces audio while a client is connected, so it never signals end of stream — not on pause, and not when suspended. - Tests for kill-on-teardown, kill-on-cancel and drain-on-clean-end. **Related issue (if applicable):** - n/a ## Types of changes <!-- Tick exactly one box. CI (.github/workflows/pr-labels.yaml) derives the label from the ticked box and applies it automatically; the release-notes generator uses that same label to slot this change into the next release notes. --> - [x] Bugfix (non-breaking change which fixes an issue) — `bugfix` - [ ] New feature (non-breaking change which adds functionality) — `new-feature` - [ ] Enhancement to an existing feature — `enhancement` - [ ] New music/player/metadata/plugin provider — `new-provider` - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) — `breaking-change` - [ ] Refactor (no behaviour change) — `refactor` - [ ] Documentation only — `documentation` - [ ] Maintenance / chore — `maintenance` - [ ] CI / workflow change — `ci` - [ ] Dependencies bump — `dependencies` ## Checklist - [x] The code change is tested and works locally. - [x] `pre-commit run --all-files` passes. - [x] `pytest` passes, and tests have been added/updated under `tests/` where applicable. - [ ] For changes to shared models, the companion PR in `music-assistant/models` is linked. - [ ] For changes affecting the UI, the companion PR in `music-assistant/frontend` is linked. - [x] I have read and complied with the project's [AI Policy](https://github.com/music-assistant/.github/blob/main/AI_POLICY.md) for any AI-assisted contributions. - [ ] I have [raised a PR against the documentation repository](https://github.com/music-assistant/music-assistant.io/blob/main/CONTRIBUTING.md) targeting the main or beta branch as appropriate.