static int periodic_check_predecessor_delay = 120;
static int periodic_lookup_delay = 10;
+static const double sleep_delay = 4.9999;
+
extern long int smx_total_comms;
/*
double next_check_predecessor_date = init_time + periodic_check_predecessor_delay;
double next_lookup_date = init_time + periodic_lookup_delay;
- #ifdef HAVE_MC
int listen = 0;
int no_op = 0;
int sub_protocol = 0;
- #endif
xbt_assert(argc == 3 || argc == 5, "Wrong number of arguments for this node");
// no task was received: make some periodic calls
-#ifdef HAVE_MC
if(MC_is_active()){
if(!MC_visited_reduction() && no_op){
MC_cut();
random_lookup(&node);
listen = 1;
}else{
- MSG_process_sleep(5);
+ MSG_process_sleep(sleep_delay);
if(!MC_visited_reduction())
no_op = 1;
}
next_lookup_date = MSG_get_clock() + periodic_lookup_delay;
}else {
// nothing to do: sleep for a while
- MSG_process_sleep(5);
+ MSG_process_sleep(sleep_delay);
}
}
-#else
- if (MSG_get_clock() >= next_stabilize_date) {
- stabilize(&node);
- next_stabilize_date = MSG_get_clock() + periodic_stabilize_delay;
- }else if (MSG_get_clock() >= next_fix_fingers_date) {
- fix_fingers(&node);
- next_fix_fingers_date = MSG_get_clock() + periodic_fix_fingers_delay;
- }else if (MSG_get_clock() >= next_check_predecessor_date) {
- check_predecessor(&node);
- next_check_predecessor_date = MSG_get_clock() + periodic_check_predecessor_delay;
- }else if (MSG_get_clock() >= next_lookup_date) {
- random_lookup(&node);
- next_lookup_date = MSG_get_clock() + periodic_lookup_delay;
- }else {
- // nothing to do: sleep for a while
- MSG_process_sleep(5);
- }
-#endif
} else {
// a transfer has occurred
}
if (node.comm_receive) {
+ /* handle last task if any */
+ if (MSG_comm_wait(node.comm_receive, 0) == MSG_OK)
+ task_free(task_received);
MSG_comm_destroy(node.comm_receive);
node.comm_receive = NULL;
}
MSG_task_dsend(task, task_data->answer_to, task_free);
break;
+ default:
+ THROW_IMPOSSIBLE;
}
}