- comm.send(nb.get_ctrl_mbox(), new message(message::INFO, load));
- double load_to_send = nb.get_to_send();
- if (load_to_send > 0.0) {
- comm.send(nb.get_data_mbox(), new message(message::LOAD, load_to_send));
- nb.set_to_send(0.0);
+ static bool last_status = true;
+
+ if (!last_status) {
+ /* nop */
+
+ } else if (opt::time_limit && MSG_get_clock() >= opt::time_limit) {
+ XBT_VERB("Reached time limit: %g/%g", MSG_get_clock(), opt::time_limit);
+ last_status = false;
+
+ } else if (opt::lb_maxiter && lb_iter >= opt::lb_maxiter) {
+ XBT_VERB("Reached lb_maxiter: %d/%d", lb_iter, opt::lb_maxiter);
+ last_status = false;
+
+ } else if (opt::comp_maxiter && comp_iter >= opt::comp_maxiter) {
+ XBT_VERB("Reached comp_maxiter: %d/%d", comp_iter, opt::comp_maxiter);
+ last_status = false;
+
+ } else if (opt::exit_on_close && close_received) {
+ XBT_VERB("Close received");
+ last_status = false;
+
+ } else if (real_load == 0.0 && !data_close_pending) {
+ XBT_VERB("I'm a poor lonesome process, and I have no load...");
+ last_status = false;
+
+ } else if (100.0 * total_load_running / total_load_init <=
+ opt::load_ratio_threshold) {
+ // fixme: this check should be implemented with a distributed
+ // algorithm, and not a shared global variable!
+ // fixme: should this chunk be moved before call to receive() ?
+ XBT_VERB("No more load to balance in system.");
+ last_status = false;