Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
plug leaks
authorFrederic Suter <frederic.suter@cc.in2p3.fr>
Mon, 16 Mar 2020 10:20:36 +0000 (11:20 +0100)
committerFrederic Suter <frederic.suter@cc.in2p3.fr>
Mon, 16 Mar 2020 10:20:36 +0000 (11:20 +0100)
examples/c/dht-kademlia/answer.c
examples/c/dht-kademlia/dht-kademlia.c
examples/c/dht-kademlia/message.c
examples/c/dht-kademlia/node.c

index 916cf1b..c50d506 100644 (file)
@@ -24,10 +24,12 @@ answer_t answer_init(unsigned int destination_id)
 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);
 }
 
index ceee01a..887bc1c 100644 (file)
@@ -58,11 +58,12 @@ static void node(int argc, char* argv[])
         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) {
@@ -77,6 +78,9 @@ static void node(int argc, char* argv[])
   } 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);
index b3fb01c..c7c78e3 100644 (file)
@@ -24,6 +24,7 @@ kademlia_message_t new_message(unsigned int sender_id, unsigned int destination_
 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);
 }
index 71b0512..cf7dec0 100644 (file)
@@ -73,7 +73,7 @@ unsigned int join(node_t node, unsigned int id_known)
       } else {
         handle_find_node(node, msg);
       }
-      free(msg->answer);
+      answer_free(msg->answer);
       free(msg);
       node->receive_comm = NULL;
     } else {
@@ -260,7 +260,7 @@ unsigned int find_node(node_t node, unsigned int id_to_find, unsigned int count_
           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 {