- time = timer::Timer::next();
- if (time > -1.0 || not actor_list_.empty()) {
- XBT_DEBUG("Calling solve");
- time = solve(time);
- XBT_DEBUG("Moving time ahead : %g", time);
+ // Compute the max_date of the next solve.
+ // It's either when a timer occurs, or when user-specified deadline is reached, or -1 if none is given
+ double next_time = timer::Timer::next();
+ if (next_time < 0 && max_date > -1) {
+ next_time = max_date;
+ } else if (next_time > -1 && max_date > -1) { // either both <0, or both >0
+ next_time = std::min(next_time, max_date);
+ }
+
+ if (next_time > -1.0 || not actor_list_.empty()) {
+ XBT_DEBUG("Calling solve(%g) %g", next_time, NOW);
+ elapsed_time = solve(next_time);
+ XBT_DEBUG("Moving time ahead. NOW=%g; elapsed: %g", NOW, elapsed_time);
+ } else {
+ elapsed_time = -1;