event/MultiSocketMonitor: migrate from TimeoutMonitor to TimerEvent

This commit is contained in:
Max Kellermann 2017-08-29 16:23:22 +02:00
parent 11f36c0bd6
commit 7ae57a3531
2 changed files with 10 additions and 7 deletions

View File

@ -28,7 +28,8 @@
#endif
MultiSocketMonitor::MultiSocketMonitor(EventLoop &_loop)
:IdleMonitor(_loop), TimeoutMonitor(_loop) {
:IdleMonitor(_loop),
timeout_event(_loop, BIND_THIS_METHOD(OnTimeout)) {
}
void
@ -38,7 +39,7 @@ MultiSocketMonitor::Reset()
fds.clear();
IdleMonitor::Cancel();
TimeoutMonitor::Cancel();
timeout_event.Cancel();
ready = refresh = false;
}
@ -81,9 +82,9 @@ MultiSocketMonitor::Prepare()
{
const auto timeout = PrepareSockets();
if (timeout >= timeout.zero())
TimeoutMonitor::Schedule(timeout);
timeout_event.Schedule(timeout);
else
TimeoutMonitor::Cancel();
timeout_event.Cancel();
}

View File

@ -22,7 +22,7 @@
#include "check.h"
#include "IdleMonitor.hxx"
#include "TimeoutMonitor.hxx"
#include "TimerEvent.hxx"
#include "SocketMonitor.hxx"
#include "Compiler.h"
@ -51,7 +51,7 @@ class EventLoop;
* In PrepareSockets(), use UpdateSocketList() and AddSocket().
* DispatchSockets() will be called if at least one socket is ready.
*/
class MultiSocketMonitor : IdleMonitor, TimeoutMonitor
class MultiSocketMonitor : IdleMonitor
{
class SingleFD final : public SocketMonitor {
MultiSocketMonitor &multi;
@ -97,6 +97,8 @@ class MultiSocketMonitor : IdleMonitor, TimeoutMonitor
friend class SingleFD;
TimerEvent timeout_event;
/**
* DispatchSockets() should be called.
*/
@ -224,7 +226,7 @@ private:
void Prepare();
virtual void OnTimeout() final {
void OnTimeout() {
SetReady();
IdleMonitor::Schedule();
}