playerKill() was marked as deprecated, but it seems like a good idea
to do proper cleanup in all threads (e.g. for usable valgrind
results).  Introduce the command "EXIT" which makes the player thread
exit cleanly.
---

 src/player.c        |    4 ++--
 src/player.h        |    1 +
 src/player_thread.c |    8 ++++++++
 3 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/src/player.c b/src/player.c
index 5c33194..59b8c92 100644
--- a/src/player.c
+++ b/src/player.c
@@ -76,9 +76,9 @@ void playerWait(void)
        playerQueueUnlock();
 }
 
-void playerKill(void) /* deprecated */
+void playerKill(void)
 {
-       playerPause();
+       player_command(PLAYER_COMMAND_EXIT);
 }
 
 void playerPause(void)
diff --git a/src/player.h b/src/player.h
index 2b1e6d9..5df32e1 100644
--- a/src/player.h
+++ b/src/player.h
@@ -32,6 +32,7 @@ enum player_state {
 
 enum player_command {
        PLAYER_COMMAND_NONE = 0,
+       PLAYER_COMMAND_EXIT,
        PLAYER_COMMAND_STOP,
        PLAYER_COMMAND_PLAY,
        PLAYER_COMMAND_PAUSE,
diff --git a/src/player_thread.c b/src/player_thread.c
index 3784445..2abb367 100644
--- a/src/player_thread.c
+++ b/src/player_thread.c
@@ -127,6 +127,7 @@ static void processDecodeInput(int *pause_r, unsigned int 
*bbp_r,
        case PLAYER_COMMAND_NONE:
        case PLAYER_COMMAND_PLAY:
        case PLAYER_COMMAND_STOP:
+       case PLAYER_COMMAND_EXIT:
        case PLAYER_COMMAND_CLOSE_AUDIO:
                break;
 
@@ -225,6 +226,7 @@ static void decodeParent(void)
                processDecodeInput(&do_pause, &bbp, &do_xfade,
                                   &decodeWaitedOn, &next);
                if (pc.command == PLAYER_COMMAND_STOP ||
+                   pc.command == PLAYER_COMMAND_EXIT ||
                    pc.command == PLAYER_COMMAND_CLOSE_AUDIO) {
                        dropBufferedAudio();
                        break;
@@ -442,6 +444,12 @@ static void * player_task(mpd_unused void *arg)
                        player_command_finished();
                        break;
 
+               case PLAYER_COMMAND_EXIT:
+                       closeAudioDevice();
+                       player_command_finished();
+                       pthread_exit(NULL);
+                       break;
+
                case PLAYER_COMMAND_LOCK_QUEUE:
                        pc.queueLockState = PLAYER_QUEUE_LOCKED;
                        player_command_finished();


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Musicpd-dev-team mailing list
Musicpd-dev-team@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/musicpd-dev-team

Reply via email to