event/Loop: move code to Wait()

This commit is contained in:
Max Kellermann 2020-10-15 20:19:01 +02:00
parent 1473d8474f
commit b611b1824a
2 changed files with 25 additions and 9 deletions

View File

@ -184,6 +184,22 @@ ExportTimeoutMS(Event::Duration timeout)
: -1;
}
inline bool
EventLoop::Wait(Event::Duration timeout) noexcept
{
const auto poll_result =
poll_group.ReadEvents(ExportTimeoutMS(timeout));
ready_sockets.clear();
for (size_t i = 0; i < poll_result.GetSize(); ++i) {
auto &s = *(SocketEvent *)poll_result.GetObject(i);
s.SetReadyFlags(poll_result.GetEvents(i));
ready_sockets.push_back(s);
}
return poll_result.GetSize() > 0;
}
void
EventLoop::Run() noexcept
{
@ -257,15 +273,7 @@ EventLoop::Run() noexcept
/* wait for new event */
const auto poll_result =
poll_group.ReadEvents(ExportTimeoutMS(timeout));
ready_sockets.clear();
for (size_t i = 0; i < poll_result.GetSize(); ++i) {
auto &s = *(SocketEvent *)poll_result.GetObject(i);
s.SetReadyFlags(poll_result.GetEvents(i));
ready_sockets.push_back(s);
}
Wait(timeout);
now = std::chrono::steady_clock::now();

View File

@ -258,6 +258,14 @@ private:
*/
Event::Duration HandleTimers() noexcept;
/**
* Call epoll_wait() and pass all returned events to
* SocketEvent::SetReadyFlags().
*
* @return true if one or more sockets have become ready
*/
bool Wait(Event::Duration timeout) noexcept;
#ifdef HAVE_THREADED_EVENT_LOOP
void OnSocketReady(unsigned flags) noexcept;
#endif