Commit f6479962 authored by Max Kellermann's avatar Max Kellermann

event/IdleEvent: use class IntrusiveList<>

parent 6f0ad2b6
......@@ -23,17 +23,6 @@
#include <cassert>
void
IdleEvent::Cancel() noexcept
{
assert(loop.IsInside());
if (!IsActive())
return;
loop.RemoveIdle(*this);
}
void
IdleEvent::Schedule() noexcept
{
assert(loop.IsInside());
......
......@@ -21,8 +21,7 @@
#define MPD_SOCKET_IDLE_EVENT_HXX
#include "util/BindMethod.hxx"
#include <boost/intrusive/list_hook.hpp>
#include "util/IntrusiveList.hxx"
class EventLoop;
......@@ -34,10 +33,9 @@ class EventLoop;
* thread that runs the #EventLoop, except where explicitly documented
* as thread-safe.
*/
class IdleEvent
: public boost::intrusive::list_base_hook<>
{
class IdleEvent final : public AutoUnlinkIntrusiveListHook {
friend class EventLoop;
friend class IntrusiveList<IdleEvent>;
EventLoop &loop;
......@@ -51,15 +49,6 @@ public:
IdleEvent(const IdleEvent &) = delete;
IdleEvent &operator=(const IdleEvent &) = delete;
~IdleEvent() noexcept {
#ifndef NDEBUG
/* this check is redundant, it is only here to avoid
the assertion in Cancel() */
if (IsActive())
#endif
Cancel();
}
auto &GetEventLoop() const noexcept {
return loop;
}
......@@ -69,7 +58,11 @@ public:
}
void Schedule() noexcept;
void Cancel() noexcept;
void Cancel() noexcept {
if (IsActive())
unlink();
}
private:
void Run() noexcept;
......
......@@ -130,14 +130,6 @@ EventLoop::AddIdle(IdleEvent &i) noexcept
}
void
EventLoop::RemoveIdle(IdleEvent &i) noexcept
{
assert(IsInside());
idle.erase(idle.iterator_to(i));
}
void
EventLoop::AddTimer(TimerEvent &t, Event::Duration d) noexcept
{
assert(IsInside());
......
......@@ -25,6 +25,7 @@
#include "SocketEvent.hxx"
#include "event/Features.h"
#include "util/Compiler.h"
#include "util/IntrusiveList.hxx"
#ifdef HAVE_THREADED_EVENT_LOOP
#include "WakeFD.hxx"
......@@ -77,10 +78,7 @@ class EventLoop final
boost::intrusive::constant_time_size<false>>;
TimerSet timers;
using IdleList =
boost::intrusive::list<IdleEvent,
boost::intrusive::base_hook<boost::intrusive::list_base_hook<>>,
boost::intrusive::constant_time_size<false>>;
using IdleList = IntrusiveList<IdleEvent>;
IdleList idle;
#ifdef HAVE_THREADED_EVENT_LOOP
......@@ -214,7 +212,6 @@ public:
bool AbandonFD(int fd) noexcept;
void AddIdle(IdleEvent &i) noexcept;
void RemoveIdle(IdleEvent &i) noexcept;
void AddTimer(TimerEvent &t, Event::Duration d) noexcept;
......
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