Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[mc] Use RAII std::vector for s_mc_comm_pattern::data
authorGabriel Corona <gabriel.corona@loria.fr>
Tue, 5 Apr 2016 11:45:37 +0000 (13:45 +0200)
committerGabriel Corona <gabriel.corona@loria.fr>
Tue, 5 Apr 2016 14:32:44 +0000 (16:32 +0200)
src/mc/CommunicationDeterminismChecker.cpp
src/mc/mc_comm_pattern.cpp
src/mc/mc_comm_pattern.h

index f2fb17e..4c51b1b 100644 (file)
@@ -46,15 +46,9 @@ static e_mc_comm_pattern_difference_t compare_comm_pattern(mc_comm_pattern_t com
     return DST_PROC_DIFF;
   if (comm1->tag != comm2->tag)
     return TAG_DIFF;
-  if (comm1->data_size != comm2->data_size)
+  if (comm1->data.size() != comm2->data.size())
     return DATA_SIZE_DIFF;
-  if(comm1->data == nullptr && comm2->data == NULL)
-    return NONE_DIFF;
-  if(comm1->data != nullptr && comm2->data !=NULL) {
-    if (!memcmp(comm1->data, comm2->data, comm1->data_size))
-      return NONE_DIFF;
-    return DATA_DIFF;
-  } else
+  if (comm1->data != comm2->data)
     return DATA_DIFF;
   return NONE_DIFF;
 }
@@ -108,14 +102,13 @@ static void update_comm_pattern(mc_comm_pattern_t comm_pattern, smx_synchro_t co
   comm_pattern->dst_proc = dst_proc->pid;
   comm_pattern->src_host = MC_smx_process_get_host_name(src_proc);
   comm_pattern->dst_host = MC_smx_process_get_host_name(dst_proc);
-  if (comm_pattern->data_size == -1 && comm.comm.src_buff != nullptr) {
+  if (comm_pattern->data.size() == 0 && comm.comm.src_buff != nullptr) {
     size_t buff_size;
     mc_model_checker->process().read(
       &buff_size, remote(comm.comm.dst_buff_size));
-    comm_pattern->data_size = buff_size;
-    comm_pattern->data = xbt_malloc0(comm_pattern->data_size);
+    comm_pattern->data.resize(buff_size);
     mc_model_checker->process().read_bytes(
-      comm_pattern->data, comm_pattern->data_size,
+      comm_pattern->data.data(), comm_pattern->data.size(),
       remote(comm.comm.src_buff));
   }
 }
@@ -185,8 +178,6 @@ void MC_get_comm_pattern(xbt_dynar_t list, smx_simcall_t request, e_mc_call_type
     incomplete_communications_pattern, issuer->pid, xbt_dynar_t);
 
   mc_comm_pattern_t pattern = new s_mc_comm_pattern_t();
-  pattern->data_size = -1;
-  pattern->data = nullptr;
   pattern->index =
     initial_pattern->index_comm + xbt_dynar_length(incomplete_pattern);
 
@@ -210,10 +201,10 @@ void MC_get_comm_pattern(xbt_dynar_t list, smx_simcall_t request, e_mc_call_type
     pattern->tag = mpi_request.tag;
 
     if(synchro.comm.src_buff != nullptr){
-      pattern->data_size = synchro.comm.src_buff_size;
-      pattern->data = xbt_malloc0(pattern->data_size);
+      pattern->data.resize(synchro.comm.src_buff_size);
       mc_model_checker->process().read_bytes(
-        pattern->data, pattern->data_size, remote(synchro.comm.src_buff));
+        pattern->data.data(), pattern->data.size(),
+        remote(synchro.comm.src_buff));
     }
     if(mpi_request.detached){
       if (!simgrid::mc::initial_global_state->initial_communications_pattern_done) {
index e8536f0..515a380 100644 (file)
@@ -27,20 +27,9 @@ mc_comm_pattern_t MC_comm_pattern_dup(mc_comm_pattern_t comm)
   res->type = comm->type;
   res->comm_addr = comm->comm_addr;
   res->rdv = comm->rdv;
-  res->data_size = -1;
-  res->data = nullptr;
-  if (comm->type == SIMIX_COMM_SEND) {
-    res->src_proc = comm->src_proc;
-    res->src_host = comm->src_host;
-    if (comm->data != nullptr) {
-      res->data_size = comm->data_size;
-      res->data = xbt_malloc0(comm->data_size);
-      memcpy(res->data, comm->data, comm->data_size);
-    }
-  } else {
-    res->dst_proc = comm->dst_proc;
-    res->dst_host = comm->dst_host;
-  }
+  res->data = comm->data;
+  res->dst_proc = comm->dst_proc;
+  res->dst_host = comm->dst_host;
   return res;
 }
 
index 1fd9774..fb3de15 100644 (file)
@@ -11,6 +11,7 @@
 #include <cstring>
 
 #include <string>
+#include <vector>
 
 #include <simgrid_config.h>
 #include <xbt/dynar.h>
@@ -32,8 +33,7 @@ typedef struct s_mc_comm_pattern{
   const char *src_host = nullptr;
   const char *dst_host = nullptr;
   std::string rdv;
-  ssize_t data_size = 0;
-  void *data = nullptr;
+  std::vector<char> data;
   int tag = 0;
   int index = 0;
 
@@ -41,10 +41,6 @@ typedef struct s_mc_comm_pattern{
   {
     std::memset(&comm_addr, 0, sizeof(comm_addr));
   }
-  ~s_mc_comm_pattern()
-  {
-    xbt_free(this->data);
-  }
 
   // No copy:
   s_mc_comm_pattern(s_mc_comm_pattern const&) = delete;