From 14986b153a0480aa3facceb3a1b94d946ef0a928 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Thu, 9 Feb 2017 21:26:55 +0100 Subject: [PATCH] event/Loop: use std::lock_guard --- src/event/Loop.cxx | 66 +++++++++++++++++++++++----------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/src/event/Loop.cxx b/src/event/Loop.cxx index ada820c2d..5593358a9 100644 --- a/src/event/Loop.cxx +++ b/src/event/Loop.cxx @@ -181,17 +181,17 @@ EventLoop::Run() /* try to handle DeferredMonitors without WakeFD overhead */ - mutex.lock(); - HandleDeferred(); - busy = false; - const bool _again = again; - mutex.unlock(); + { + const std::lock_guard lock(mutex); + HandleDeferred(); + busy = false; - if (_again) - /* re-evaluate timers because one of the - IdleMonitors may have added a new - timeout */ - continue; + if (again) + /* re-evaluate timers because one of + the IdleMonitors may have added a + new timeout */ + continue; + } /* wait for new event */ @@ -199,9 +199,10 @@ EventLoop::Run() now = std::chrono::steady_clock::now(); - mutex.lock(); - busy = true; - mutex.unlock(); + { + const std::lock_guard lock(mutex); + busy = true; + } /* invoke sockets */ for (int i = 0; i < poll_result.GetSize(); ++i) { @@ -230,24 +231,25 @@ EventLoop::Run() void EventLoop::AddDeferred(DeferredMonitor &d) { - mutex.lock(); - if (d.pending) { - mutex.unlock(); - return; + bool must_wake; + + { + const std::lock_guard lock(mutex); + if (d.pending) + return; + + assert(std::find(deferred.begin(), + deferred.end(), &d) == deferred.end()); + + /* we don't need to wake up the EventLoop if another + DeferredMonitor has already done it */ + must_wake = !busy && deferred.empty(); + + d.pending = true; + deferred.push_back(&d); + again = true; } - assert(std::find(deferred.begin(), - deferred.end(), &d) == deferred.end()); - - /* we don't need to wake up the EventLoop if another - DeferredMonitor has already done it */ - const bool must_wake = !busy && deferred.empty(); - - d.pending = true; - deferred.push_back(&d); - again = true; - mutex.unlock(); - if (must_wake) wake_fd.Write(); } @@ -281,9 +283,8 @@ EventLoop::HandleDeferred() deferred.pop_front(); m.pending = false; - mutex.unlock(); + const ScopeUnlock unlock(mutex); m.RunDeferred(); - mutex.lock(); } } @@ -294,9 +295,8 @@ EventLoop::OnSocketReady(gcc_unused unsigned flags) wake_fd.Read(); - mutex.lock(); + const std::lock_guard lock(mutex); HandleDeferred(); - mutex.unlock(); return true; }