Commit 8332a704 authored by Thomas Jansen's avatar Thomas Jansen

idle: migrate from pthread to glib threads

parent 5e3dc694
......@@ -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",
......@@ -43,13 +43,28 @@ static const char *const idle_names[] = {
};
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;
}
......
......@@ -49,6 +49,18 @@ enum {
};
/**
* 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.
*/
......
......@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment