idle: migrate from pthread to glib threads

This commit is contained in:
Thomas Jansen 2008-12-28 21:02:14 +01:00
parent 5e3dc6946f
commit 8332a70406
3 changed files with 35 additions and 6 deletions

View File

@ -25,10 +25,10 @@
#include "main_notify.h"
#include <assert.h>
#include <pthread.h>
#include <glib.h>
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;
}

View File

@ -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.

View File

@ -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;