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();
MSG_process_sleep(5);
}
}
-#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
msg_task_t task_sent = MSG_task_create(NULL, COMP_SIZE, COMM_SIZE, req_data);
XBT_DEBUG("Sending a 'PREDECESSOR_LEAVING' to my successor %d",node->fingers[0].id);
- MSG_task_send_with_timeout(task_sent, node->fingers[0].mailbox, timeout);
+ if (MSG_task_send_with_timeout(task_sent, node->fingers[0].mailbox, timeout)==
+ MSG_TIMEOUT) {
+ XBT_DEBUG("Timeout expired when sending a 'PREDECESSOR_LEAVING' to my successor %d",
+ node->fingers[0].id);
+ task_free(task_sent);
+ }
//send the SUCCESSOR_LEAVING to our predecessor
get_mailbox(node->pred_id, mailbox);
msg_task_t task_sent_s = MSG_task_create(NULL, COMP_SIZE, COMM_SIZE, req_data_s);
XBT_DEBUG("Sending a 'SUCCESSOR_LEAVING' to my predecessor %d",node->pred_id);
- MSG_task_send_with_timeout(task_sent_s, mailbox, timeout);
+ if (MSG_task_send_with_timeout(task_sent_s, mailbox, timeout)==
+ MSG_TIMEOUT) {
+ XBT_DEBUG("Timeout expired when sending a 'SUCCESSOR_LEAVING' to my predecessor %d",
+ node->pred_id);
+ task_free(task_sent_s);
+ }
}
stop = 1;
MSG_comm_destroy(node->comm_receive);
node->comm_receive = NULL;
+ task_free(task_sent);
}
else {
msg_task_t task_received = MSG_comm_get_task(node->comm_receive);