diff options
Diffstat (limited to '')
-rw-r--r-- | src/player.c | 14 | ||||
-rw-r--r-- | src/player.h | 1 | ||||
-rw-r--r-- | src/playerData.c | 1 |
3 files changed, 10 insertions, 6 deletions
diff --git a/src/player.c b/src/player.c index f9aedcd20..a8bb2404d 100644 --- a/src/player.c +++ b/src/player.c @@ -33,9 +33,6 @@ #include "sig_handlers.h" #include "os_compat.h" -static pthread_cond_t player_wakeup = PTHREAD_COND_INITIALIZER; -static pthread_mutex_t player_wakeup_mutex = PTHREAD_MUTEX_INITIALIZER; - static pthread_cond_t main_wakeup = PTHREAD_COND_INITIALIZER; static pthread_mutex_t main_wakeup_mutex = PTHREAD_MUTEX_INITIALIZER; @@ -43,12 +40,14 @@ static void playerCloseAudio(void); void wakeup_player_nb(void) { - pthread_cond_signal(&player_wakeup); + PlayerControl *pc = &(getPlayerData()->playerControl); + notifySignal(&pc->notify); } static void wakeup_player(void) { - pthread_cond_signal(&player_wakeup); + PlayerControl *pc = &(getPlayerData()->playerControl); + notifySignal(&pc->notify); pthread_cond_wait(&main_wakeup, &main_wakeup_mutex); } @@ -59,13 +58,16 @@ void wakeup_main_task(void) void player_sleep(void) { - pthread_cond_wait(&player_wakeup, &player_wakeup_mutex); + PlayerControl *pc = &(getPlayerData()->playerControl); + notifyWait(&pc->notify); } static void * player_task(mpd_unused void *unused) { PlayerControl *pc = &(getPlayerData()->playerControl); + notifyEnter(&pc->notify); + while (1) { if (pc->play) { decode(); diff --git a/src/player.h b/src/player.h index c819a90c6..8e2678ef1 100644 --- a/src/player.h +++ b/src/player.h @@ -51,6 +51,7 @@ #define PLAYER_QUEUE_LOCKED 1 typedef struct _PlayerControl { + Notify notify; volatile mpd_sint8 stop; volatile mpd_sint8 play; volatile mpd_sint8 pause; diff --git a/src/playerData.c b/src/playerData.c index 3261d444a..27b69cfb2 100644 --- a/src/playerData.c +++ b/src/playerData.c @@ -96,6 +96,7 @@ void initPlayerData(void) initOutputBuffer(&(playerData_pd->buffer), (OutputBufferChunk*)(((char *)playerData_pd) + sizeof(PlayerData))); + notifyInit(&playerData_pd->playerControl.notify); playerData_pd->playerControl.stop = 0; playerData_pd->playerControl.pause = 0; playerData_pd->playerControl.play = 0; |