Mercurial > irccd
changeset 403:8b7d1366c75c
Irccd: protect timer state change in lock
author | David Demelier <markand@malikania.fr> |
---|---|
date | Wed, 11 Jan 2017 14:46:09 +0100 |
parents | 2a11d0e07a53 |
children | 91fc587ddae0 |
files | libirccd-js/irccd/timer.cpp |
diffstat | 1 files changed, 11 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/libirccd-js/irccd/timer.cpp Wed Jan 11 14:15:28 2017 +0100 +++ b/libirccd-js/irccd/timer.cpp Wed Jan 11 14:46:09 2017 +0100 @@ -32,7 +32,7 @@ // Wait in case the timer is paused. m_condition.wait(lock, [&] () { - return m_state != Paused; + return m_state == Running; }); if (m_state != Running) @@ -83,13 +83,21 @@ { assert(m_state != Running); - m_state = Running; + { + std::lock_guard<std::mutex> lk(m_mutex); + m_state = Running; + } + m_condition.notify_one(); } void Timer::stop() { - m_state = Paused; + { + std::lock_guard<std::mutex> lk(m_mutex); + m_state = Paused; + } + m_condition.notify_one(); }