From ada67a6a4ff53bef4d874eafea83272eac8e18f1 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Fri, 27 Sep 2013 07:58:48 +0200 Subject: PlayerThread: move code to player_control::CommandFinished() --- src/PlayerControl.hxx | 14 ++++++++++++++ src/PlayerThread.cxx | 33 ++++++++++++--------------------- 2 files changed, 26 insertions(+), 21 deletions(-) (limited to 'src') diff --git a/src/PlayerControl.hxx b/src/PlayerControl.hxx index 498f91143..4134cc08c 100644 --- a/src/PlayerControl.hxx +++ b/src/PlayerControl.hxx @@ -228,6 +228,20 @@ struct player_control { client_cond.wait(mutex); } + /** + * A command has been finished. This method clears the + * command and signals the client. + * + * To be called from the player thread. Caller must lock the + * object. + */ + void CommandFinished() { + assert(command != PLAYER_COMMAND_NONE); + + command = PLAYER_COMMAND_NONE; + ClientSignal(); + } + /** * @param song the song to be queued; the given instance will * be owned and freed by the player diff --git a/src/PlayerThread.cxx b/src/PlayerThread.cxx index 24cd9d0ef..fa39dbb18 100644 --- a/src/PlayerThread.cxx +++ b/src/PlayerThread.cxx @@ -270,20 +270,11 @@ struct player { void Run(); }; -static void -player_command_finished_locked(player_control &pc) -{ - assert(pc.command != PLAYER_COMMAND_NONE); - - pc.command = PLAYER_COMMAND_NONE; - pc.ClientSignal(); -} - static void player_command_finished(player_control &pc) { pc.Lock(); - player_command_finished_locked(pc); + pc.CommandFinished(); pc.Unlock(); } @@ -608,7 +599,7 @@ player::ProcessCommand() pc.Unlock(); audio_output_all_enable_disable(); pc.Lock(); - player_command_finished_locked(pc); + pc.CommandFinished(); break; case PLAYER_COMMAND_QUEUE: @@ -617,7 +608,7 @@ player::ProcessCommand() assert(!IsDecoderAtNextSong()); queued = true; - player_command_finished_locked(pc); + pc.CommandFinished(); break; case PLAYER_COMMAND_PAUSE: @@ -641,7 +632,7 @@ player::ProcessCommand() pc.Lock(); } - player_command_finished_locked(pc); + pc.CommandFinished(); break; case PLAYER_COMMAND_SEEK: @@ -670,7 +661,7 @@ player::ProcessCommand() pc.next_song->Free(); pc.next_song = nullptr; queued = false; - player_command_finished_locked(pc); + pc.CommandFinished(); break; case PLAYER_COMMAND_REFRESH: @@ -684,7 +675,7 @@ player::ProcessCommand() if (pc.elapsed_time < 0.0) pc.elapsed_time = elapsed_time; - player_command_finished_locked(pc); + pc.CommandFinished(); break; } } @@ -930,7 +921,7 @@ player::Run() if (pc.command == PLAYER_COMMAND_SEEK) elapsed_time = pc.seek_where; - player_command_finished_locked(pc); + pc.CommandFinished(); while (true) { ProcessCommand(); @@ -1138,7 +1129,7 @@ player_task(gpointer arg) pc.next_song = nullptr; } - player_command_finished_locked(pc); + pc.CommandFinished(); break; case PLAYER_COMMAND_CLOSE_AUDIO: @@ -1147,7 +1138,7 @@ player_task(gpointer arg) audio_output_all_release(); pc.Lock(); - player_command_finished_locked(pc); + pc.CommandFinished(); assert(buffer.IsEmptyUnsafe()); @@ -1157,7 +1148,7 @@ player_task(gpointer arg) pc.Unlock(); audio_output_all_enable_disable(); pc.Lock(); - player_command_finished_locked(pc); + pc.CommandFinished(); break; case PLAYER_COMMAND_EXIT: @@ -1176,12 +1167,12 @@ player_task(gpointer arg) pc.next_song = nullptr; } - player_command_finished_locked(pc); + pc.CommandFinished(); break; case PLAYER_COMMAND_REFRESH: /* no-op when not playing */ - player_command_finished_locked(pc); + pc.CommandFinished(); break; case PLAYER_COMMAND_NONE: -- cgit v1.2.3