Commit 977004c3 authored by Max Kellermann's avatar Max Kellermann

event/DeferredMonitor: use EventLoop::AddIdle()

parent fdc7d13a
......@@ -33,6 +33,9 @@
namespace GlobalEvents {
class Monitor final : public DeferredMonitor {
public:
Monitor(EventLoop &_loop):DeferredMonitor(_loop) {}
protected:
virtual void Run() override;
};
......@@ -67,9 +70,9 @@ GlobalEvents::Monitor::Run()
}
void
GlobalEvents::Initialize()
GlobalEvents::Initialize(EventLoop &loop)
{
monitor.Construct();
monitor.Construct(loop);
}
void
......
......@@ -29,6 +29,8 @@
#endif
#endif
class EventLoop;
namespace GlobalEvents {
enum Event {
/** database update was finished */
......@@ -59,7 +61,7 @@ namespace GlobalEvents {
typedef void (*Handler)();
void Initialize();
void Initialize(EventLoop &loop);
void Deinitialize();
......
......@@ -438,7 +438,7 @@ int mpd_main(int argc, char *argv[])
daemonize_set_user();
GlobalEvents::Initialize();
GlobalEvents::Initialize(*main_loop);
GlobalEvents::Register(GlobalEvents::IDLE, idle_event_emitted);
#ifdef WIN32
GlobalEvents::Register(GlobalEvents::SHUTDOWN, shutdown_event_emitted);
......
......@@ -32,7 +32,7 @@ DeferredMonitor::Cancel()
void
DeferredMonitor::Schedule()
{
const unsigned id = g_idle_add(Callback, this);
const unsigned id = loop.AddIdle(Callback, this);
const auto old_id = source_id.exchange(id);
if (old_id != 0)
g_source_remove(old_id);
......
......@@ -26,15 +26,19 @@
#include <atomic>
class EventLoop;
/**
* Defer execution of an event into an #EventLoop.
*/
class DeferredMonitor {
EventLoop &loop;
std::atomic<guint> source_id;
public:
DeferredMonitor()
:source_id(0) {}
DeferredMonitor(EventLoop &_loop)
:loop(_loop), source_id(0) {}
~DeferredMonitor() {
Cancel();
......
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