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