void answer_free(answer_t answer)
{
unsigned int i;
- for (i = 0; i < answer->size; i++) {
- node_contact_free(*(void**)xbt_dynar_get_ptr(answer->nodes, i));
+ if (answer) {
+ for (i = 0; i < answer->size; i++) {
+ node_contact_free(*(void**)xbt_dynar_get_ptr(answer->nodes, i));
+ }
+ xbt_dynar_free(&answer->nodes);
}
- xbt_dynar_free(&answer->nodes);
xbt_free(answer);
}
const kademlia_message_t msg = (kademlia_message_t)(node->received_msg);
if (msg) {
handle_find_node(node, msg);
- free(msg->answer);
+ answer_free(msg->answer);
free(msg);
node->receive_comm = NULL;
- } else
+ } else {
sg_actor_sleep_for(1);
+ }
} else {
/* We search for a pseudo random node */
if (simgrid_get_clock() >= next_lookup_time) {
} else {
XBT_INFO("I couldn't join the network :(");
}
+ if (node->receive_comm)
+ sg_comm_unref(node->receive_comm);
+
XBT_DEBUG("I'm leaving the network");
XBT_INFO("%u/%u FIND_NODE have succeeded", node->find_node_success, node->find_node_success + node->find_node_failed);
node_free(node);
void free_message(void* message)
{
const kademlia_message_t msg = (kademlia_message_t)message;
- free(msg->answer);
+ if (msg)
+ answer_free(msg->answer);
free(msg);
}
} else {
handle_find_node(node, msg);
}
- free(msg->answer);
+ answer_free(msg->answer);
free(msg);
node->receive_comm = NULL;
} else {
timeout += simgrid_get_clock() - time_beginreceive;
time_beginreceive = simgrid_get_clock();
}
- free(msg->answer);
+ answer_free(msg->answer);
free(msg);
node->receive_comm = NULL;
} else {