aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/player.c14
-rw-r--r--src/player.h1
-rw-r--r--src/playerData.c1
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;