event/IdleEvent: use class IntrusiveList<>

This commit is contained in:
Max Kellermann 2020-10-18 19:21:47 +02:00
parent 6f0ad2b6c5
commit f64799622d
4 changed files with 10 additions and 39 deletions

View File

@ -22,17 +22,6 @@
#include <cassert>
void
IdleEvent::Cancel() noexcept
{
assert(loop.IsInside());
if (!IsActive())
return;
loop.RemoveIdle(*this);
}
void
IdleEvent::Schedule() noexcept
{

View File

@ -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;

View File

@ -129,14 +129,6 @@ EventLoop::AddIdle(IdleEvent &i) noexcept
again = true;
}
void
EventLoop::RemoveIdle(IdleEvent &i) noexcept
{
assert(IsInside());
idle.erase(idle.iterator_to(i));
}
void
EventLoop::AddTimer(TimerEvent &t, Event::Duration d) noexcept
{

View File

@ -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;