diff options
author | Max Kellermann <max@duempel.org> | 2009-10-16 15:09:22 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2009-10-16 15:09:22 +0200 |
commit | 2c908fde1b5f0c0be1c7c7d4dd4fd444c31ae341 (patch) | |
tree | 7792a3eaf0b0dcf697990ccb8407ba04dfb7c6ac | |
parent | 6037beabe1b704093620704d279cda43d4874c4e (diff) | |
download | mpd-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-- | NEWS | 1 | ||||
-rw-r--r-- | src/output_thread.c | 3 |
2 files changed, 3 insertions, 1 deletions
@@ -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 |