Idle: use std::atomic instead of GMutex
This commit is contained in:
parent
d769b74d61
commit
36c814d26e
@ -19,7 +19,6 @@
|
|||||||
|
|
||||||
#include "ClientMessage.hxx"
|
#include "ClientMessage.hxx"
|
||||||
|
|
||||||
#include <assert.h>
|
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
|
||||||
G_GNUC_PURE
|
G_GNUC_PURE
|
||||||
|
36
src/Idle.cxx
36
src/Idle.cxx
@ -26,11 +26,11 @@
|
|||||||
#include "Idle.hxx"
|
#include "Idle.hxx"
|
||||||
#include "GlobalEvents.hxx"
|
#include "GlobalEvents.hxx"
|
||||||
|
|
||||||
#include <assert.h>
|
#include <atomic>
|
||||||
#include <glib.h>
|
|
||||||
|
|
||||||
static unsigned idle_flags;
|
#include <assert.h>
|
||||||
static GMutex *idle_mutex = NULL;
|
|
||||||
|
static std::atomic_uint idle_flags;
|
||||||
|
|
||||||
static const char *const idle_names[] = {
|
static const char *const idle_names[] = {
|
||||||
"database",
|
"database",
|
||||||
@ -44,32 +44,15 @@ static const char *const idle_names[] = {
|
|||||||
"update",
|
"update",
|
||||||
"subscription",
|
"subscription",
|
||||||
"message",
|
"message",
|
||||||
NULL
|
nullptr
|
||||||
};
|
};
|
||||||
|
|
||||||
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
|
void
|
||||||
idle_add(unsigned flags)
|
idle_add(unsigned flags)
|
||||||
{
|
{
|
||||||
assert(flags != 0);
|
assert(flags != 0);
|
||||||
|
|
||||||
g_mutex_lock(idle_mutex);
|
|
||||||
idle_flags |= flags;
|
idle_flags |= flags;
|
||||||
g_mutex_unlock(idle_mutex);
|
|
||||||
|
|
||||||
GlobalEvents::Emit(GlobalEvents::IDLE);
|
GlobalEvents::Emit(GlobalEvents::IDLE);
|
||||||
}
|
}
|
||||||
@ -77,14 +60,7 @@ idle_add(unsigned flags)
|
|||||||
unsigned
|
unsigned
|
||||||
idle_get(void)
|
idle_get(void)
|
||||||
{
|
{
|
||||||
unsigned flags;
|
return idle_flags.fetch_and(0);
|
||||||
|
|
||||||
g_mutex_lock(idle_mutex);
|
|
||||||
flags = idle_flags;
|
|
||||||
idle_flags = 0;
|
|
||||||
g_mutex_unlock(idle_mutex);
|
|
||||||
|
|
||||||
return flags;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const char*const*
|
const char*const*
|
||||||
|
12
src/Idle.hxx
12
src/Idle.hxx
@ -61,18 +61,6 @@ enum {
|
|||||||
IDLE_MESSAGE = 0x400,
|
IDLE_MESSAGE = 0x400,
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* 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
|
* Adds idle flag (with bitwise "or") and queues notifications to all
|
||||||
* clients.
|
* clients.
|
||||||
|
@ -375,7 +375,6 @@ int mpd_main(int argc, char *argv[])
|
|||||||
|
|
||||||
io_thread_init();
|
io_thread_init();
|
||||||
winsock_init();
|
winsock_init();
|
||||||
idle_init();
|
|
||||||
config_global_init();
|
config_global_init();
|
||||||
|
|
||||||
success = parse_cmdline(argc, argv, &options, &error);
|
success = parse_cmdline(argc, argv, &options, &error);
|
||||||
@ -565,7 +564,6 @@ int mpd_main(int argc, char *argv[])
|
|||||||
archive_plugin_deinit_all();
|
archive_plugin_deinit_all();
|
||||||
#endif
|
#endif
|
||||||
config_global_finish();
|
config_global_finish();
|
||||||
idle_deinit();
|
|
||||||
stats_global_finish();
|
stats_global_finish();
|
||||||
io_thread_deinit();
|
io_thread_deinit();
|
||||||
daemonize_finish();
|
daemonize_finish();
|
||||||
|
Loading…
Reference in New Issue
Block a user