aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2008-04-12 04:14:45 +0000
committerEric Wong <normalperson@yhbt.net>2008-04-12 04:14:45 +0000
commit4ee8396f417d15c161b425c6f8c15fe845242434 (patch)
treef284695c784364904aebe52d0129e3a98deb4384
parentb7ac3fab465f883220790df8cad84d8bd96446bb (diff)
downloadmpd-4ee8396f417d15c161b425c6f8c15fe845242434.tar.gz
mpd-4ee8396f417d15c161b425c6f8c15fe845242434.tar.xz
mpd-4ee8396f417d15c161b425c6f8c15fe845242434.zip
use the notify API in the main thread
git-svn-id: https://svn.musicpd.org/mpd/trunk@7283 09075e82-0dd4-0310-85a5-a0d7c8717e4f
-rw-r--r--src/main.c16
-rw-r--r--src/player.c10
-rw-r--r--src/player.h2
3 files changed, 19 insertions, 9 deletions
diff --git a/src/main.c b/src/main.c
index 428ef2a91..1c513b171 100644
--- a/src/main.c
+++ b/src/main.c
@@ -56,6 +56,8 @@ typedef struct _Options {
int verbose;
} Options;
+static Notify main_notify;
+
/*
* from git-1.3.0, needed for solaris
*/
@@ -378,6 +380,16 @@ static void killFromPidFile(char *cmd, int killOption)
exit(EXIT_SUCCESS);
}
+void wakeup_main_task(void)
+{
+ notifySignal(&main_notify);
+}
+
+void wait_main_task(void)
+{
+ notifySignal(&main_notify);
+}
+
int main(int argc, char *argv[])
{
Options options;
@@ -420,6 +432,8 @@ int main(int argc, char *argv[])
initNormalization();
initInputStream();
+ notifyInit(&main_notify);
+
daemonize(&options);
setup_log_output(options.stdOutput);
@@ -433,6 +447,8 @@ int main(int argc, char *argv[])
playerInit();
read_state_file();
+ notifyEnter(&main_notify);
+
while (COMMAND_RETURN_KILL != doIOForInterfaces() &&
COMMAND_RETURN_KILL != handlePendingSignals()) {
syncPlayerAndPlaylist();
diff --git a/src/player.c b/src/player.c
index a8bb2404d..07c074060 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 main_wakeup = PTHREAD_COND_INITIALIZER;
-static pthread_mutex_t main_wakeup_mutex = PTHREAD_MUTEX_INITIALIZER;
-
static void playerCloseAudio(void);
void wakeup_player_nb(void)
@@ -48,12 +45,7 @@ static void wakeup_player(void)
{
PlayerControl *pc = &(getPlayerData()->playerControl);
notifySignal(&pc->notify);
- pthread_cond_wait(&main_wakeup, &main_wakeup_mutex);
-}
-
-void wakeup_main_task(void)
-{
- pthread_cond_signal(&main_wakeup);
+ wait_main_task();
}
void player_sleep(void)
diff --git a/src/player.h b/src/player.h
index 8e2678ef1..7f43cc0d8 100644
--- a/src/player.h
+++ b/src/player.h
@@ -80,6 +80,8 @@ typedef struct _PlayerControl {
void wakeup_main_task(void);
+void wait_main_task(void);
+
void wakeup_player_nb(void);
void player_sleep(void);