Commit 9ab0a1f5 authored by Max Kellermann's avatar Max Kellermann

EventLoop: add methodd IsInside()

Track which thread runs the EventLoop and provide a check whether we're currently inside.
parent c043b337
......@@ -23,7 +23,12 @@
void
EventLoop::Run()
{
assert(thread == nullptr);
thread = g_thread_self();
g_main_loop_run(loop);
assert(thread == g_thread_self());
}
guint
......
......@@ -25,25 +25,44 @@
#include <glib.h>
#include <assert.h>
class EventLoop {
GMainContext *context;
GMainLoop *loop;
/**
* A reference to the thread that is currently inside Run().
*/
GThread *thread;
public:
EventLoop()
:context(g_main_context_new()),
loop(g_main_loop_new(context, false)) {}
loop(g_main_loop_new(context, false)),
thread(nullptr) {}
struct Default {};
EventLoop(gcc_unused Default _dummy)
:context(g_main_context_ref(g_main_context_default())),
loop(g_main_loop_new(context, false)) {}
loop(g_main_loop_new(context, false)),
thread(nullptr) {}
~EventLoop() {
g_main_loop_unref(loop);
g_main_context_unref(context);
}
/**
* Are we currently running inside this EventLoop's thread?
*/
gcc_pure
bool IsInside() const {
assert(thread != nullptr);
return g_thread_self() == thread;
}
GMainContext *GetContext() {
return context;
}
......
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