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();
 }