Index: src/DefaultTimer.cpp
===================================================================
--- a/src/DefaultTimer.cpp
+++ b/src/DefaultTimer.cpp
@@ -58,17 +58,18 @@
     {
       conditionVariable.wait(lock, [this]()->bool
       {
         return shouldThreadStop || !timers.empty();
       });
     }
     else
     {
-      conditionVariable.wait_until(lock, timers.top().fireAt);
+      auto fireAt = timers.top().fireAt;
+      conditionVariable.wait_until(lock, fireAt);
     }
     // execute all expired timers and remove them
     while (!shouldThreadStop && !timers.empty() && timers.top().fireAt <= std::chrono::steady_clock::now())
     {
       auto callback = timers.top().callback;
       timers.pop();
       // allow to put new timers while this timer is being processed
       lock.unlock();
