char mailbox[MAILBOX_NAME_SIZE];
snprintf(mailbox,MAILBOX_NAME_SIZE, "%d", id_to_ping);
- unsigned int destination_found = 0;
double timeout = MSG_get_clock() + ping_timeout;
msg_task_t ping_task = task_new_ping(node->id, node->mailbox, MSG_host_get_name(MSG_host_self()));
if (data->type == TASK_PING_ANSWER && id_to_ping == data->sender_id) {
XBT_VERB("Ping to %s succeeded", mailbox);
node_routing_table_update(node, data->sender_id);
- destination_found = 1;
task_free(task_received);
+ return 1; // Destination found, ping succeeded!
} else {
//If it's not our answer, we answer the query anyway.
handle_task(node, task_received);
}
}
- } while (destination_found == 0 && MSG_get_clock() < timeout);
+ } while (MSG_get_clock() < timeout);
if (MSG_get_clock() >= timeout) {
XBT_DEBUG("Ping to %s has timeout.", mailbox);
return 0;
}
- if (destination_found == -1) {
- XBT_DEBUG("It seems that %s is offline...", mailbox);
- return 0;
- }
- return 1;
+ XBT_DEBUG("It seems that %s is offline...", mailbox);
+ return -1;
}
/** @brief Does a pseudo-random lookup for someone in the system
unsigned int i = 0;
unsigned int j = 0;
unsigned int destination = node_list->destination_id;
- node_contact_t node_to_query;
while (j < kademlia_alpha && i < node_list->size) {
/* We need to have at most "kademlia_alpha" requests each time, according to the protocol */
/* Gets the node we want to send the query to */
- node_to_query = xbt_dynar_get_as(node_list->nodes, i, node_contact_t);
+ node_contact_t node_to_query = xbt_dynar_get_as(node_list->nodes, i, node_contact_t);
if (node_to_query->id != node->id) { /* No need to query ourselves */
send_find_node(node, node_to_query->id, destination);
j++;