UpdateRemove: Mutex/Cond instead of GMutex/GCond
This commit is contained in:
@@ -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 @@
|
|||||||
#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 @@
|
|||||||
|
|
||||||
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,28 +66,18 @@ 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
|
|
||||||
update_remove_global_finish(void)
|
|
||||||
{
|
|
||||||
g_mutex_free(remove_mutex);
|
|
||||||
g_cond_free(remove_cond);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
update_remove_song(const struct song *song)
|
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;
|
|||||||
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
|
||||||
|
Reference in New Issue
Block a user