Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[mc] Use std::string for request_get_dot_output() and s_mc_global_t::prev_req
authorGabriel Corona <gabriel.corona@loria.fr>
Tue, 5 Apr 2016 14:25:32 +0000 (16:25 +0200)
committerGabriel Corona <gabriel.corona@loria.fr>
Tue, 5 Apr 2016 14:32:44 +0000 (16:32 +0200)
src/mc/CommunicationDeterminismChecker.cpp
src/mc/LivenessChecker.cpp
src/mc/SafetyChecker.cpp
src/mc/mc_request.cpp
src/mc/mc_request.h
src/mc/mc_snapshot.h

index 15f19f0..da1b86e 100644 (file)
@@ -409,7 +409,7 @@ int CommunicationDeterminismChecker::main(void)
         simgrid::mc::request_to_string(
           req, value, simgrid::mc::RequestType::simix).c_str());
 
-      char* req_str = nullptr;
+      std::string req_str;
       if (dot_output != nullptr)
         req_str = simgrid::mc::request_get_dot_output(req, value);
 
@@ -452,17 +452,15 @@ int CommunicationDeterminismChecker::main(void)
             MC_state_interleave_process(next_state.get(), &p.copy);
 
         if (dot_output != nullptr)
-          fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n", state->num,  next_state->num, req_str);
+          fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n",
+            state->num,  next_state->num, req_str.c_str());
 
       } else if (dot_output != nullptr)
         fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n",
-          state->num, visited_state->other_num == -1 ? visited_state->num : visited_state->other_num, req_str);
+          state->num, visited_state->other_num == -1 ? visited_state->num : visited_state->other_num, req_str.c_str());
 
       stack_.push_back(std::move(next_state));
 
-      if (dot_output != nullptr)
-        xbt_free(req_str);
-
     } else {
 
       if (stack_.size() > (std::size_t) _sg_mc_max_depth)
index 5ded308..567548f 100644 (file)
@@ -138,7 +138,7 @@ std::shared_ptr<VisitedPair> LivenessChecker::insertAcceptancePair(simgrid::mc::
     if (dot_output != nullptr)
       fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n",
         initial_global_state->prev_pair, pair_test->num,
-        initial_global_state->prev_req);
+        initial_global_state->prev_req.c_str());
     return nullptr;
   }
 
@@ -366,7 +366,9 @@ int LivenessChecker::main(void)
       && (visited_num = this->insertVisitedPair(
         reached_pair, current_pair.get())) != -1) {
       if (dot_output != nullptr){
-        fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n", initial_global_state->prev_pair, visited_num, initial_global_state->prev_req);
+        fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n",
+          initial_global_state->prev_pair, visited_num,
+          initial_global_state->prev_req.c_str());
         fflush(dot_output);
       }
       XBT_DEBUG("Pair already visited (equal to pair %d), exploration on the current path stopped.", visited_num);
@@ -380,8 +382,10 @@ int LivenessChecker::main(void)
 
     if (dot_output != nullptr) {
       if (initial_global_state->prev_pair != 0 && initial_global_state->prev_pair != current_pair->num) {
-        fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n", initial_global_state->prev_pair, current_pair->num, initial_global_state->prev_req);
-        xbt_free(initial_global_state->prev_req);
+        fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n",
+          initial_global_state->prev_pair, current_pair->num,
+          initial_global_state->prev_req.c_str());
+        initial_global_state->prev_req.clear();
       }
       initial_global_state->prev_pair = current_pair->num;
       initial_global_state->prev_req = simgrid::mc::request_get_dot_output(req, value);
index 4b8c59f..bcb9065 100644 (file)
@@ -126,7 +126,7 @@ int SafetyChecker::run()
       simgrid::mc::request_to_string(
         req, value, simgrid::mc::RequestType::simix).c_str());
 
-    char* req_str = nullptr;
+    std::string req_str;
     if (dot_output != nullptr)
       req_str = simgrid::mc::request_get_dot_output(req, value);
 
@@ -161,15 +161,15 @@ int SafetyChecker::run()
         }
 
       if (dot_output != nullptr)
-        std::fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n", state->num, next_state->num, req_str);
+        std::fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n",
+          state->num, next_state->num, req_str.c_str());
 
     } else if (dot_output != nullptr)
-      std::fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n", state->num, visitedState_->other_num == -1 ? visitedState_->num : visitedState_->other_num, req_str);
+      std::fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n",
+        state->num,
+        visitedState_->other_num == -1 ? visitedState_->num : visitedState_->other_num, req_str.c_str());
 
     stack_.push_back(std::move(next_state));
-
-    if (dot_output != nullptr)
-      xbt_free(req_str);
   }
 
   XBT_INFO("No property violation found.");
index 556e335..121ce91 100644 (file)
@@ -481,17 +481,16 @@ static inline const char* get_color(int id)
   return colors[id % (sizeof(colors) / sizeof(colors[0])) ];
 }
 
-char *request_get_dot_output(smx_simcall_t req, int value)
+std::string request_get_dot_output(smx_simcall_t req, int value)
 {
-  char *label = nullptr;
+  std::string label;
 
   const smx_process_t issuer = MC_smx_simcall_get_issuer(req);
 
   switch (req->call) {
   case SIMCALL_COMM_ISEND:
     if (issuer->host)
-      label =
-          bprintf("[(%lu)%s] iSend", issuer->pid,
+      label = simgrid::xbt::string_printf("[(%lu)%s] iSend", issuer->pid,
                   MC_smx_process_get_host_name(issuer));
     else
       label = bprintf("[(%lu)] iSend", issuer->pid);
@@ -499,21 +498,19 @@ char *request_get_dot_output(smx_simcall_t req, int value)
 
   case SIMCALL_COMM_IRECV:
     if (issuer->host)
-      label =
-          bprintf("[(%lu)%s] iRecv", issuer->pid,
+      label = simgrid::xbt::string_printf("[(%lu)%s] iRecv", issuer->pid,
                   MC_smx_process_get_host_name(issuer));
     else
-      label = bprintf("[(%lu)] iRecv", issuer->pid);
+      label = simgrid::xbt::string_printf("[(%lu)] iRecv", issuer->pid);
     break;
 
   case SIMCALL_COMM_WAIT: {
     if (value == -1) {
       if (issuer->host)
-        label =
-            bprintf("[(%lu)%s] WaitTimeout", issuer->pid,
+        label = simgrid::xbt::string_printf("[(%lu)%s] WaitTimeout", issuer->pid,
                     MC_smx_process_get_host_name(issuer));
       else
-        label = bprintf("[(%lu)] WaitTimeout", issuer->pid);
+        label = simgrid::xbt::string_printf("[(%lu)] WaitTimeout", issuer->pid);
     } else {
       smx_synchro_t remote_act = simcall_comm_wait__get__comm(req);
       s_smx_synchro_t synchro;
@@ -523,14 +520,14 @@ char *request_get_dot_output(smx_simcall_t req, int value)
       smx_process_t src_proc = MC_smx_resolve_process(synchro.comm.src_proc);
       smx_process_t dst_proc = MC_smx_resolve_process(synchro.comm.dst_proc);
       if (issuer->host)
-        label =
-            bprintf("[(%lu)%s] Wait [(%lu)->(%lu)]", issuer->pid,
+        label = simgrid::xbt::string_printf("[(%lu)%s] Wait [(%lu)->(%lu)]",
+                    issuer->pid,
                     MC_smx_process_get_host_name(issuer),
                     src_proc ? src_proc->pid : 0,
                     dst_proc ? dst_proc->pid : 0);
       else
-        label =
-            bprintf("[(%lu)] Wait [(%lu)->(%lu)]", issuer->pid,
+        label = simgrid::xbt::string_printf("[(%lu)] Wait [(%lu)->(%lu)]",
+                    issuer->pid,
                     src_proc ? src_proc->pid : 0,
                     dst_proc ? dst_proc->pid : 0);
     }
@@ -544,18 +541,17 @@ char *request_get_dot_output(smx_simcall_t req, int value)
       sizeof(synchro), remote(remote_act));
     if (synchro.comm.src_proc == nullptr || synchro.comm.dst_proc == NULL) {
       if (issuer->host)
-        label =
-            bprintf("[(%lu)%s] Test FALSE", issuer->pid,
+        label = simgrid::xbt::string_printf("[(%lu)%s] Test FALSE",
+                    issuer->pid,
                     MC_smx_process_get_host_name(issuer));
       else
         label = bprintf("[(%lu)] Test FALSE", issuer->pid);
     } else {
       if (issuer->host)
-        label =
-            bprintf("[(%lu)%s] Test TRUE", issuer->pid,
+        label = simgrid::xbt::string_printf("[(%lu)%s] Test TRUE", issuer->pid,
                     MC_smx_process_get_host_name(issuer));
       else
-        label = bprintf("[(%lu)] Test TRUE", issuer->pid);
+        label = simgrid::xbt::string_printf("[(%lu)] Test TRUE", issuer->pid);
     }
     break;
   }
@@ -564,54 +560,51 @@ char *request_get_dot_output(smx_simcall_t req, int value)
     unsigned long comms_size = read_length(
       mc_model_checker->process(), remote(simcall_comm_waitany__get__comms(req)));
     if (issuer->host)
-      label =
-          bprintf("[(%lu)%s] WaitAny [%d of %lu]", issuer->pid,
+      label = simgrid::xbt::string_printf("[(%lu)%s] WaitAny [%d of %lu]",
+                  issuer->pid,
                   MC_smx_process_get_host_name(issuer), value + 1,
                   comms_size);
     else
-      label =
-          bprintf("[(%lu)] WaitAny [%d of %lu]", issuer->pid, value + 1,
-                  comms_size);
+      label = simgrid::xbt::string_printf("[(%lu)] WaitAny [%d of %lu]",
+                  issuer->pid, value + 1, comms_size);
     break;
   }
 
   case SIMCALL_COMM_TESTANY:
     if (value == -1) {
       if (issuer->host)
-        label =
-            bprintf("[(%lu)%s] TestAny FALSE", issuer->pid,
-                    MC_smx_process_get_host_name(issuer));
+        label = simgrid::xbt::string_printf("[(%lu)%s] TestAny FALSE",
+                    issuer->pid, MC_smx_process_get_host_name(issuer));
       else
-        label = bprintf("[(%lu)] TestAny FALSE", issuer->pid);
+        label = simgrid::xbt::string_printf("[(%lu)] TestAny FALSE", issuer->pid);
     } else {
       if (issuer->host)
-        label =
-            bprintf("[(%lu)%s] TestAny TRUE [%d of %lu]", issuer->pid,
+        label = simgrid::xbt::string_printf("[(%lu)%s] TestAny TRUE [%d of %lu]",
+                    issuer->pid,
                     MC_smx_process_get_host_name(issuer), value + 1,
                     xbt_dynar_length(simcall_comm_testany__get__comms(req)));
       else
-        label =
-            bprintf("[(%lu)] TestAny TRUE [%d of %lu]", issuer->pid,
+        label = simgrid::xbt::string_printf("[(%lu)] TestAny TRUE [%d of %lu]",
+                    issuer->pid,
                     value + 1,
                     xbt_dynar_length(simcall_comm_testany__get__comms(req)));
     }
     break;
 
   case SIMCALL_MUTEX_TRYLOCK:
-    label = bprintf("[(%lu)] Mutex TRYLOCK", issuer->pid);
+    label = simgrid::xbt::string_printf("[(%lu)] Mutex TRYLOCK", issuer->pid);
     break;
 
   case SIMCALL_MUTEX_LOCK:
-    label = bprintf("[(%lu)] Mutex LOCK", issuer->pid);
+    label = simgrid::xbt::string_printf("[(%lu)] Mutex LOCK", issuer->pid);
     break;
 
   case SIMCALL_MC_RANDOM:
     if (issuer->host)
-      label =
-          bprintf("[(%lu)%s] MC_RANDOM (%d)", issuer->pid,
-                  MC_smx_process_get_host_name(issuer), value);
+      label = simgrid::xbt::string_printf("[(%lu)%s] MC_RANDOM (%d)",
+                  issuer->pid, MC_smx_process_get_host_name(issuer), value);
     else
-      label = bprintf("[(%lu)] MC_RANDOM (%d)", issuer->pid, value);
+      label = simgrid::xbt::string_printf("[(%lu)] MC_RANDOM (%d)", issuer->pid, value);
     break;
 
   default:
@@ -619,12 +612,9 @@ char *request_get_dot_output(smx_simcall_t req, int value)
   }
 
   const char* color = get_color(issuer->pid - 1);
-  char* str =
-      bprintf("label = \"%s\", color = %s, fontcolor = %s", label,
-              color, color);
-  xbt_free(label);
-  return str;
-
+  return  simgrid::xbt::string_printf(
+        "label = \"%s\", color = %s, fontcolor = %s", label.c_str(),
+        color, color);
 }
 
 }
index 97c153a..c03e2a3 100644 (file)
@@ -34,7 +34,7 @@ XBT_PRIVATE bool request_is_enabled_by_idx(smx_simcall_t req, unsigned int idx);
  */
 XBT_PRIVATE bool process_is_enabled(smx_process_t process);
 
-XBT_PRIVATE char *request_get_dot_output(smx_simcall_t req, int value);
+XBT_PRIVATE std::string request_get_dot_output(smx_simcall_t req, int value);
 
 }
 }
index a7b4b00..81dc444 100644 (file)
@@ -131,7 +131,7 @@ typedef struct XBT_PRIVATE s_mc_snapshot_stack {
 typedef struct s_mc_global_t {
   std::shared_ptr<simgrid::mc::Snapshot> snapshot;
   int prev_pair = 0;
-  char *prev_req = nullptr;
+  std::string prev_req;
   int initial_communications_pattern_done = 0;
   int recv_deterministic = 0;
   int send_deterministic = 0;