output_thread: fix race condition after CANCEL command

Clear the notification before finishing the CANCEL command, so the
notify_wait() after that will always wait for the right notification,
sent by audio_output_all_cancel().
This commit is contained in:
Max Kellermann 2010-08-19 11:05:24 +02:00
parent 625e4755d1
commit 64dacd175a
2 changed files with 11 additions and 0 deletions

1
NEWS
View File

@ -1,4 +1,5 @@
ver 0.15.13 (2010/??/??)
* output_thread: fix race condition after CANCEL command
ver 0.15.12 (2010/07/20)

View File

@ -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