Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Fighting more memory leaks in Chord
authorChristophe Thiéry <christopho128@gmail.com>
Thu, 13 Oct 2011 14:45:05 +0000 (16:45 +0200)
committerChristophe Thiéry <christopho128@gmail.com>
Thu, 13 Oct 2011 14:45:05 +0000 (16:45 +0200)
examples/msg/chord/chord.c
src/simix/smx_process.c

index 082a555..e916d85 100644 (file)
@@ -82,6 +82,7 @@ static int *powers2;
 
 // utility functions
 static void chord_initialize(void);
+static void chord_exit(void);
 static int normalize(int id);
 static int is_in_interval(int id, int start, int end);
 static void get_mailbox(int host_id, char* mailbox);
@@ -127,6 +128,11 @@ static void chord_initialize(void)
   XBT_DEBUG("Sets nb_keys to %d", nb_keys);
 }
 
+static void chord_exit(void)
+{
+  xbt_free(powers2);
+}
+
 /**
  * \brief Turns an id into an equivalent id in [0, nb_keys).
  * \param id an id
@@ -342,7 +348,9 @@ int node(int argc, char *argv[])
           MSG_process_sleep(5);
         }
       }
-      else {
+
+      if (node.comm_receive && MSG_comm_test(node.comm_receive)) {
+
         // a transfer has occured
 
         MSG_error_t status = MSG_comm_get_status(node.comm_receive);
@@ -914,6 +922,7 @@ int main(int argc, char *argv[])
   XBT_INFO("Simulated time: %g", MSG_get_clock());
 
   MSG_clean();
+  chord_exit();
 
   if (res == MSG_OK)
     return 0;
index bf5707b..7a169dd 100644 (file)
@@ -200,6 +200,8 @@ void SIMIX_process_kill(smx_process_t process) {
   process->blocked = 0;
   process->suspended = 0;
   /* FIXME: set doexception to 0 also? */
+  /* FIXME: asynchronous communication actions are not destroyed:
+   * another process may find a matching rdv with me after I'm freed */
 
   if (process->waiting_action) {