Commit 3928c4e9 authored by Max Kellermann's avatar Max Kellermann

UpdateRemove: Mutex/Cond instead of GMutex/GCond

parent 32799fef
...@@ -182,5 +182,4 @@ void update_global_init(void) ...@@ -182,5 +182,4 @@ void update_global_init(void)
void update_global_finish(void) void update_global_finish(void)
{ {
update_walk_global_finish(); update_walk_global_finish();
update_remove_global_finish();
} }
...@@ -22,6 +22,8 @@ ...@@ -22,6 +22,8 @@
#include "Playlist.hxx" #include "Playlist.hxx"
#include "Partition.hxx" #include "Partition.hxx"
#include "GlobalEvents.hxx" #include "GlobalEvents.hxx"
#include "thread/Mutex.hxx"
#include "thread/Cond.hxx"
#include "song.h" #include "song.h"
#include "Main.hxx" #include "Main.hxx"
...@@ -37,8 +39,8 @@ ...@@ -37,8 +39,8 @@
static const struct song *removed_song; static const struct song *removed_song;
static GMutex *remove_mutex; static Mutex remove_mutex;
static GCond *remove_cond; static Cond remove_cond;
/** /**
* Safely remove a song from the database. This must be done in the * Safely remove a song from the database. This must be done in the
...@@ -64,29 +66,19 @@ song_remove_event(void) ...@@ -64,29 +66,19 @@ song_remove_event(void)
global_partition->DeleteSong(*removed_song); global_partition->DeleteSong(*removed_song);
/* clear "removed_song" and send signal to update thread */ /* clear "removed_song" and send signal to update thread */
g_mutex_lock(remove_mutex); remove_mutex.lock();
removed_song = NULL; removed_song = NULL;
g_cond_signal(remove_cond); remove_cond.signal();
g_mutex_unlock(remove_mutex); remove_mutex.unlock();
} }
void void
update_remove_global_init(void) update_remove_global_init(void)
{ {
remove_mutex = g_mutex_new();
remove_cond = g_cond_new();
GlobalEvents::Register(GlobalEvents::DELETE, song_remove_event); GlobalEvents::Register(GlobalEvents::DELETE, song_remove_event);
} }
void void
update_remove_global_finish(void)
{
g_mutex_free(remove_mutex);
g_cond_free(remove_cond);
}
void
update_remove_song(const struct song *song) update_remove_song(const struct song *song)
{ {
assert(removed_song == NULL); assert(removed_song == NULL);
...@@ -95,10 +87,10 @@ update_remove_song(const struct song *song) ...@@ -95,10 +87,10 @@ update_remove_song(const struct song *song)
GlobalEvents::Emit(GlobalEvents::DELETE); GlobalEvents::Emit(GlobalEvents::DELETE);
g_mutex_lock(remove_mutex); remove_mutex.lock();
while (removed_song != NULL) while (removed_song != NULL)
g_cond_wait(remove_cond, remove_mutex); remove_cond.wait(remove_mutex);
g_mutex_unlock(remove_mutex); remove_mutex.unlock();
} }
...@@ -27,9 +27,6 @@ struct song; ...@@ -27,9 +27,6 @@ struct song;
void void
update_remove_global_init(void); update_remove_global_init(void);
void
update_remove_global_finish(void);
/** /**
* Sends a signal to the main thread which will in turn remove the * Sends a signal to the main thread which will in turn remove the
* song: from the sticker database and from the playlist. This * song: from the sticker database and from the playlist. This
......
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