aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--NEWS1
-rw-r--r--src/output_thread.c10
2 files changed, 11 insertions, 0 deletions
diff --git a/NEWS b/NEWS
index c8f63f4de..566422cfe 100644
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,5 @@
ver 0.15.13 (2010/??/??)
+* output_thread: fix race condition after CANCEL command
ver 0.15.12 (2010/07/20)
diff --git a/src/output_thread.c b/src/output_thread.c
index 770b377e8..e652eae57 100644
--- a/src/output_thread.c
+++ b/src/output_thread.c
@@ -268,6 +268,16 @@ static gpointer audio_output_task(gpointer arg)
ao->chunk = NULL;
if (ao->open)
ao_plugin_cancel(ao->plugin, ao->data);
+
+ /* we must clear the notification now, because
+ the notify_wait() call below must wait
+ until audio_output_all_cancel() has cleared
+ the pipe; if another notification happens
+ to be still pending, we get a race
+ condition with a crash or an assertion
+ failure */
+ notify_clear(&ao->notify);
+
ao_command_finished(ao);
/* the player thread will now clear our music