From 5eaf2b8fc3736f73df433c81fbca0941d184f7c5 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@musicpd.org>
Date: Mon, 12 Nov 2018 12:21:59 +0100
Subject: [PATCH] output/control: always close the `AudioOutputSource` in
 `RELEASE`

Fixes a crash bug with `always_on` outputs which occurs because the
`AudioOutputSource` still has a pointer to an outdated `MusicChunk`.

Fixes #415
---
 NEWS                  | 2 +-
 src/output/Thread.cxx | 7 ++++++-
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/NEWS b/NEWS
index cece79a95..fa66df85a 100644
--- a/NEWS
+++ b/NEWS
@@ -6,7 +6,7 @@ ver 0.21.2 (not yet released)
   - ffmpeg: fix broken sound with certain codecs
 * output
   - alsa: fix high CPU usage with dmix
-  - httpd: fix two crash bugs
+  - httpd: fix three crash bugs
 * mixer
   - alsa: fix more rounding errors
 * fix zlib support
diff --git a/src/output/Thread.cxx b/src/output/Thread.cxx
index b88eecbad..b0556b34d 100644
--- a/src/output/Thread.cxx
+++ b/src/output/Thread.cxx
@@ -467,7 +467,12 @@ AudioOutputControl::Task() noexcept
 
 			if (always_on) {
 				/* in "always_on" mode, the output is
-				   paused instead of being closed */
+				   paused instead of being closed;
+				   however we need to close the
+				   AudioOutputSource because its data
+				   have been invalidated by stopping
+				   the actual playback */
+				source.Close();
 				InternalPause();
 			} else {
 				InternalClose(false);