diff --git a/src/audacious/adder.c b/src/audacious/adder.c index 0e5379d..37cc5e6 100644 --- a/src/audacious/adder.c +++ b/src/audacious/adder.c @@ -18,7 +18,6 @@ */ #include -#include #include #include @@ -54,10 +53,10 @@ static GList * add_tasks = NULL; static GList * add_results = NULL; static int current_playlist_id = -1; -static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; -static pthread_cond_t cond = PTHREAD_COND_INITIALIZER; +static GStaticMutex mutex = G_STATIC_MUTEX_INIT; +static GCond cond; static bool_t add_quit; -static pthread_t add_thread; +static GThread *add_thread; static int add_source = 0; static int status_source = 0; @@ -98,7 +97,7 @@ static bool_t status_cb (void * unused) gtk_widget_destroyed, & status_window); } - pthread_mutex_lock (& mutex); + g_static_mutex_lock (& mutex); char scratch[128]; snprintf (scratch, sizeof scratch, dngettext (PACKAGE, "%d file found", @@ -115,13 +114,13 @@ static bool_t status_cb (void * unused) gtk_label_set_text ((GtkLabel *) status_count_label, scratch); } - pthread_mutex_unlock (& mutex); + g_static_mutex_unlock (& mutex); return TRUE; } static void status_update (const char * filename, int found) { - pthread_mutex_lock (& mutex); + g_static_mutex_lock (& mutex); snprintf (status_path, sizeof status_path, "%s", filename); status_count = found; @@ -129,7 +128,7 @@ static void status_update (const char * filename, int found) if (! status_source) status_source = g_timeout_add (250, status_cb, NULL); - pthread_mutex_unlock (& mutex); + g_static_mutex_unlock (& mutex); } static void status_done_locked (void) @@ -397,7 +396,7 @@ static void add_generic (char * filename, Tuple * tuple, static bool_t add_finish (void * unused) { - pthread_mutex_lock (& mutex); + g_static_mutex_lock (& mutex); while (add_results) { @@ -449,21 +448,23 @@ static bool_t add_finish (void * unused) if (! add_tasks) status_done_locked (); - pthread_mutex_unlock (& mutex); + g_static_mutex_unlock (& mutex); hook_call ("playlist add complete", NULL); return FALSE; } -static void * add_worker (void * unused) +static gpointer add_worker (gpointer unused) { - pthread_mutex_lock (& mutex); + g_static_mutex_lock (& mutex); while (! add_quit) { if (! add_tasks) { - pthread_cond_wait (& cond, & mutex); + GMutex *gmutex = g_static_mutex_get_mutex(& mutex); + + g_cond_wait (& cond, gmutex); continue; } @@ -471,7 +472,7 @@ static void * add_worker (void * unused) add_tasks = g_list_delete_link (add_tasks, add_tasks); current_playlist_id = task->playlist_id; - pthread_mutex_unlock (& mutex); + g_static_mutex_unlock (& mutex); AddResult * result = add_result_new (task->playlist_id, task->at, task->play); @@ -493,7 +494,7 @@ static void * add_worker (void * unused) add_task_free (task); - pthread_mutex_lock (& mutex); + g_static_mutex_lock (& mutex); current_playlist_id = -1; add_results = g_list_append (add_results, result); @@ -502,25 +503,25 @@ static void * add_worker (void * unused) add_source = g_timeout_add (0, add_finish, NULL); } - pthread_mutex_unlock (& mutex); + g_static_mutex_unlock (& mutex); return NULL; } void adder_init (void) { - pthread_mutex_lock (& mutex); + g_static_mutex_lock (& mutex); add_quit = FALSE; - pthread_create (& add_thread, NULL, add_worker, NULL); - pthread_mutex_unlock (& mutex); + add_thread = g_thread_new (NULL, add_worker, NULL); + g_static_mutex_unlock (& mutex); } void adder_cleanup (void) { - pthread_mutex_lock (& mutex); + g_static_mutex_lock (& mutex); add_quit = TRUE; - pthread_cond_broadcast (& cond); - pthread_mutex_unlock (& mutex); - pthread_join (add_thread, NULL); + g_cond_broadcast (& cond); + g_static_mutex_unlock (& mutex); + g_thread_join (add_thread); g_list_free_full (add_tasks, (GDestroyNotify) add_task_free); add_tasks = NULL; @@ -562,15 +563,15 @@ void playlist_entry_insert_filtered (int playlist, int at, AddTask * task = add_task_new (playlist_id, at, play, filenames, tuples, filter, user); - pthread_mutex_lock (& mutex); + g_static_mutex_lock (& mutex); add_tasks = g_list_append (add_tasks, task); - pthread_cond_broadcast (& cond); - pthread_mutex_unlock (& mutex); + g_cond_broadcast (& cond); + g_static_mutex_unlock (& mutex); } bool_t playlist_add_in_progress (int playlist) { - pthread_mutex_lock (& mutex); + g_static_mutex_lock (& mutex); if (playlist >= 0) { @@ -597,10 +598,10 @@ bool_t playlist_add_in_progress (int playlist) goto YES; } - pthread_mutex_unlock (& mutex); + g_static_mutex_unlock (& mutex); return FALSE; YES: - pthread_mutex_unlock (& mutex); + g_static_mutex_unlock (& mutex); return TRUE; }