From 8332a70406140cbc7594ca9d54cb9a600b470bb4 Mon Sep 17 00:00:00 2001 From: Thomas Jansen Date: Sun, 28 Dec 2008 21:02:14 +0100 Subject: idle: migrate from pthread to glib threads --- src/idle.c | 27 +++++++++++++++++++++------ src/idle.h | 12 ++++++++++++ src/main.c | 2 ++ 3 files changed, 35 insertions(+), 6 deletions(-) diff --git a/src/idle.c b/src/idle.c index 884086aae..4de252ada 100644 --- a/src/idle.c +++ b/src/idle.c @@ -25,10 +25,10 @@ #include "main_notify.h" #include -#include +#include static unsigned idle_flags; -static pthread_mutex_t idle_mutex = PTHREAD_MUTEX_INITIALIZER; +static GMutex *idle_mutex = NULL; static const char *const idle_names[] = { "database", @@ -42,14 +42,29 @@ static const char *const idle_names[] = { NULL }; +void +idle_init(void) +{ + g_assert(idle_mutex == NULL); + idle_mutex = g_mutex_new(); +} + +void +idle_deinit(void) +{ + g_assert(idle_mutex != NULL); + g_mutex_free(idle_mutex); + idle_mutex = NULL; +} + void idle_add(unsigned flags) { assert(flags != 0); - pthread_mutex_lock(&idle_mutex); + g_mutex_lock(idle_mutex); idle_flags |= flags; - pthread_mutex_unlock(&idle_mutex); + g_mutex_unlock(idle_mutex); wakeup_main_task(); } @@ -59,10 +74,10 @@ idle_get(void) { unsigned flags; - pthread_mutex_lock(&idle_mutex); + g_mutex_lock(idle_mutex); flags = idle_flags; idle_flags = 0; - pthread_mutex_unlock(&idle_mutex); + g_mutex_unlock(idle_mutex); return flags; } diff --git a/src/idle.h b/src/idle.h index 5079f09db..d65575ebe 100644 --- a/src/idle.h +++ b/src/idle.h @@ -48,6 +48,18 @@ enum { IDLE_OPTIONS = 0x40, }; +/** + * Initialize the mutex + */ +void +idle_init(void); + +/** + * Destroy the mutex + */ +void +idle_deinit(void); + /** * Adds idle flag (with bitwise "or") and queues notifications to all * clients. diff --git a/src/main.c b/src/main.c index b64a07f22..e9f696bb0 100644 --- a/src/main.c +++ b/src/main.c @@ -268,6 +268,7 @@ int main(int argc, char *argv[]) /* enable GLib's thread safety code */ g_thread_init(NULL); + idle_init(); initConf(); parseOptions(argc, argv, &options); @@ -382,6 +383,7 @@ int main(int argc, char *argv[]) music_pipe_free(); cleanUpPidFile(); finishConf(); + idle_deinit(); close_log_files(); return EXIT_SUCCESS; -- cgit v1.2.3