message: timeout_handler: start over instead of breaking
  When the map has been invalidated we should not bail out completely
  because some other timers might be due in this iteration. Instead we
  should start over and work  our way through them again.
diff: @@ -82,11 +82,10 @@ void TimeoutHandler::run_once()
  ++it;
  }
  - // We leave the loop if anyone has messed with this while we called the callback.
  - // FIXME: there should be a nicer way to do this.
  + // We start over if anyone has messed with this while we called the callback.
  if (_iterator_invalidated) {
  _iterator_invalidated = false;
  - break;
  + it = _timeouts.begin();
  }
  }
  _timeouts_mutex.unlock();
  