aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2009-10-16 15:09:22 +0200
committerMax Kellermann <max@duempel.org>2009-10-16 15:09:22 +0200
commit2c908fde1b5f0c0be1c7c7d4dd4fd444c31ae341 (patch)
tree7792a3eaf0b0dcf697990ccb8407ba04dfb7c6ac
parent6037beabe1b704093620704d279cda43d4874c4e (diff)
downloadmpd-2c908fde1b5f0c0be1c7c7d4dd4fd444c31ae341.tar.gz
mpd-2c908fde1b5f0c0be1c7c7d4dd4fd444c31ae341.tar.xz
mpd-2c908fde1b5f0c0be1c7c7d4dd4fd444c31ae341.zip
output_thread: check again if output is open on CANCEL
When the player thread unpauses, it sends CANCEL to the output thread, after having checked that the output is still open. Problem is when the output thread closes the device before it can process the CANCEL command - race condition. This patch adds another "open" check inside the output thread.
-rw-r--r--NEWS1
-rw-r--r--src/output_thread.c3
2 files changed, 3 insertions, 1 deletions
diff --git a/NEWS b/NEWS
index ec6cbe663..af70f783b 100644
--- a/NEWS
+++ b/NEWS
@@ -5,6 +5,7 @@ ver 0.15.5 (2009/??/??)
* tags:
- riff, aiff: fixed "limited range" gcc warning
* decoder_thread: change the fallback decoder name to "mad"
+* output_thread: check again if output is open on CANCEL
ver 0.15.4 (2009/10/03)
diff --git a/src/output_thread.c b/src/output_thread.c
index 785ac808f..9ca844623 100644
--- a/src/output_thread.c
+++ b/src/output_thread.c
@@ -257,7 +257,8 @@ static gpointer audio_output_task(gpointer arg)
case AO_COMMAND_CANCEL:
ao->chunk = NULL;
- ao_plugin_cancel(ao->plugin, ao->data);
+ if (ao->open)
+ ao_plugin_cancel(ao->plugin, ao->data);
ao_command_finished(ao);
/* the player thread will now clear our music