Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Fix MC build after changes for waitany.
authorArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Tue, 19 Feb 2019 15:35:06 +0000 (16:35 +0100)
committerArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Wed, 20 Feb 2019 08:42:03 +0000 (09:42 +0100)
src/mc/mc_comm_pattern.cpp
src/mc/mc_request.cpp
src/mc/mc_state.cpp

index 07e30d0..898c036 100644 (file)
@@ -89,11 +89,9 @@ void MC_handle_comm_pattern(
       comm_addr = remote(static_cast<simgrid::kernel::activity::CommImpl*>(simcall_comm_wait__getraw__comm(req)));
 
     else {
-      simgrid::kernel::activity::CommImpl* addr;
-      // comm_addr = REMOTE(xbt_dynar_get_as(simcall_comm_waitany__get__comms(req), value, smx_synchro_t)):
-      simgrid::mc::read_element(mc_model_checker->process(), &addr, remote(simcall_comm_waitany__get__comms(req)),
-                                value, sizeof(comm_addr));
-      comm_addr = remote(addr);
+      simgrid::kernel::activity::ActivityImpl* addr;
+      addr      = mc_model_checker->process().read(remote(simcall_comm_waitany__getraw__comms(req) + value));
+      comm_addr = remote(static_cast<simgrid::kernel::activity::CommImpl*>(addr));
       }
       checker->complete_comm_pattern(pattern, comm_addr, MC_smx_simcall_get_issuer(req)->get_pid(), backtracking);
     }
index 27a7ec8..1aa4073 100644 (file)
@@ -301,17 +301,12 @@ std::string simgrid::mc::request_to_string(smx_simcall_t req, int value, simgrid
 
   case SIMCALL_COMM_WAITANY: {
     type = "WaitAny";
-    s_xbt_dynar_t comms;
-    mc_model_checker->process().read_bytes(
-      &comms, sizeof(comms), remote(simcall_comm_waitany__get__comms(req)));
-    if (not xbt_dynar_is_empty(&comms)) {
-      smx_activity_t remote_sync;
-      read_element(mc_model_checker->process(),
-        &remote_sync, remote(simcall_comm_waitany__get__comms(req)), value,
-        sizeof(remote_sync));
-      char* p = pointer_to_string(remote_sync.get());
-      args = bprintf("comm=%s (%d of %lu)",
-        p, value + 1, xbt_dynar_length(&comms));
+    size_t count = simcall_comm_waitany__get__count(req);
+    if (count > 0) {
+      simgrid::kernel::activity::ActivityImpl* remote_sync;
+      remote_sync = mc_model_checker->process().read(remote(simcall_comm_waitany__getraw__comms(req) + value));
+      char* p     = pointer_to_string(remote_sync);
+      args        = bprintf("comm=%s (%d of %zu)", p, value + 1, count);
       xbt_free(p);
     } else
       args = bprintf("comm at idx %d", value);
@@ -388,8 +383,7 @@ bool request_is_enabled_by_idx(smx_simcall_t req, unsigned int idx)
     break;
 
   case SIMCALL_COMM_WAITANY:
-    read_element(mc_model_checker->process(), &remote_act, remote(simcall_comm_waitany__getraw__comms(req)), idx,
-                 sizeof(remote_act));
+    remote_act = mc_model_checker->process().read(remote(simcall_comm_testany__getraw__comms(req) + idx));
     break;
 
   case SIMCALL_COMM_TESTANY:
@@ -497,13 +491,12 @@ std::string request_get_dot_output(smx_simcall_t req, int value)
   }
 
   case SIMCALL_COMM_WAITANY: {
-    unsigned long comms_size = read_length(
-      mc_model_checker->process(), remote(simcall_comm_waitany__get__comms(req)));
+    size_t comms_size = simcall_comm_waitany__get__count(req);
     if (issuer->get_host())
-      label = simgrid::xbt::string_printf("[(%ld)%s] WaitAny [%d of %lu]", issuer->get_pid(),
+      label = simgrid::xbt::string_printf("[(%ld)%s] WaitAny [%d of %zu]", issuer->get_pid(),
                                           MC_smx_actor_get_host_name(issuer), value + 1, comms_size);
     else
-      label = simgrid::xbt::string_printf("[(%ld)] WaitAny [%d of %lu]", issuer->get_pid(), value + 1, comms_size);
+      label = simgrid::xbt::string_printf("[(%ld)] WaitAny [%d of %zu]", issuer->get_pid(), value + 1, comms_size);
     break;
   }
 
index 7095aa9..707a6d0 100644 (file)
@@ -75,17 +75,14 @@ static inline smx_simcall_t MC_state_get_request_for_process(simgrid::mc::State*
   switch (actor->simcall.call) {
     case SIMCALL_COMM_WAITANY:
       state->transition.argument = -1;
-      while (procstate->times_considered <
-             read_length(mc_model_checker->process(), remote(simcall_comm_waitany__get__comms(&actor->simcall)))) {
+      while (procstate->times_considered < simcall_comm_waitany__get__count(&actor->simcall)) {
         if (simgrid::mc::request_is_enabled_by_idx(&actor->simcall, procstate->times_considered++)) {
           state->transition.argument = procstate->times_considered - 1;
           break;
         }
       }
 
-      if (procstate->times_considered >=
-          simgrid::mc::read_length(mc_model_checker->process(),
-                                   simgrid::mc::remote(simcall_comm_waitany__get__comms(&actor->simcall))))
+      if (procstate->times_considered >= simcall_comm_waitany__get__count(&actor->simcall))
         procstate->setDone();
       if (state->transition.argument != -1)
         req = &actor->simcall;
@@ -157,8 +154,8 @@ static inline smx_simcall_t MC_state_get_request_for_process(simgrid::mc::State*
   case SIMCALL_COMM_WAITANY: {
     state->internal_req.call = SIMCALL_COMM_WAIT;
     simgrid::kernel::activity::ActivityImpl* remote_comm;
-    read_element(mc_model_checker->process(), &remote_comm, remote(simcall_comm_waitany__getraw__comms(req)),
-                 state->transition.argument, sizeof(remote_comm));
+    remote_comm =
+        mc_model_checker->process().read(remote(simcall_comm_waitany__getraw__comms(req) + state->transition.argument));
     mc_model_checker->process().read(state->internal_comm,
                                      remote(static_cast<simgrid::kernel::activity::CommImpl*>(remote_comm)));
     simcall_comm_wait__set__comm(&state->internal_req, state->internal_comm.getBuffer());