thread/Id: new class replacing GThread pointers

Remove a GLib dependencies from class EventLoop and DatabaseLock.
This commit is contained in:
Max Kellermann
2013-08-10 09:00:04 +02:00
parent 018f4155eb
commit d23c907a94
6 changed files with 117 additions and 15 deletions

View File

@@ -23,12 +23,12 @@
void
EventLoop::Run()
{
assert(thread == nullptr);
thread = g_thread_self();
assert(thread.IsNull());
thread = ThreadId::GetCurrent();
g_main_loop_run(loop);
assert(thread == g_thread_self());
assert(thread.IsInside());
}
guint

View File

@@ -21,6 +21,7 @@
#define MPD_EVENT_LOOP_HXX
#include "check.h"
#include "thread/Id.hxx"
#include "gcc.h"
#include <glib.h>
@@ -34,19 +35,19 @@ class EventLoop {
/**
* A reference to the thread that is currently inside Run().
*/
GThread *thread;
ThreadId thread;
public:
EventLoop()
:context(g_main_context_new()),
loop(g_main_loop_new(context, false)),
thread(nullptr) {}
thread(ThreadId::Null()) {}
struct Default {};
EventLoop(gcc_unused Default _dummy)
:context(g_main_context_ref(g_main_context_default())),
loop(g_main_loop_new(context, false)),
thread(nullptr) {}
thread(ThreadId::Null()) {}
~EventLoop() {
g_main_loop_unref(loop);
@@ -58,9 +59,9 @@ public:
*/
gcc_pure
bool IsInside() const {
assert(thread != nullptr);
assert(!thread.IsNull());
return g_thread_self() == thread;
return thread.IsInside();
}
GMainContext *GetContext() {