aboutsummaryrefslogtreecommitdiffstats
path: root/src/Idle.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'src/Idle.cxx')
-rw-r--r--src/Idle.cxx34
1 files changed, 5 insertions, 29 deletions
diff --git a/src/Idle.cxx b/src/Idle.cxx
index fce0cb7da..f1423ebeb 100644
--- a/src/Idle.cxx
+++ b/src/Idle.cxx
@@ -26,11 +26,11 @@
#include "Idle.hxx"
#include "GlobalEvents.hxx"
+#include <atomic>
+
#include <assert.h>
-#include <glib.h>
-static unsigned idle_flags;
-static GMutex *idle_mutex = NULL;
+static std::atomic_uint idle_flags;
static const char *const idle_names[] = {
"database",
@@ -44,32 +44,15 @@ static const char *const idle_names[] = {
"update",
"subscription",
"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
idle_add(unsigned flags)
{
assert(flags != 0);
- g_mutex_lock(idle_mutex);
idle_flags |= flags;
- g_mutex_unlock(idle_mutex);
GlobalEvents::Emit(GlobalEvents::IDLE);
}
@@ -77,14 +60,7 @@ idle_add(unsigned flags)
unsigned
idle_get(void)
{
- unsigned flags;
-
- g_mutex_lock(idle_mutex);
- flags = idle_flags;
- idle_flags = 0;
- g_mutex_unlock(idle_mutex);
-
- return flags;
+ return idle_flags.fetch_and(0);
}
const char*const*