- while ((ctrl_close_pending ||
- data_close_pending) && comm.recv(msg, from, wait_for_close)) {
- DEBUG2("received %s from %s",
- msg->to_string().c_str(), MSG_host_get_name(from));
- switch (msg->get_type()) {
- case message::INFO: {
- neighbor* n = rev_neigh[from];
- n->set_load(msg->get_amount());
- break;
- }
- case message::CREDIT:
- expected_load += msg->get_amount();
- break;
- case message::LOAD:
- load += msg->get_amount();
- break;
- case message::CTRL_CLOSE:
- if (--ctrl_close_pending == 1)
- comm.next_close_on_ctrl_is_last();
- DEBUG1("ctrl_close_pending = %d", ctrl_close_pending);
- result = false;
- break;
- case message::DATA_CLOSE:
- if (--data_close_pending == 1)
- comm.next_close_on_data_is_last();
- DEBUG1("data_close_pending = %d", data_close_pending);
- result = false;
- break;
- }
- delete msg;
+
+ XBT_DEBUG("%sblocking receive on ctrl (%g)", "\0non-" + !timeout, timeout);
+ while (ctrl_close_pending && comm.ctrl_recv(msg, from, timeout)) {
+ handle_message(msg, from);
+ timeout = 0.0;