Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Specialize parameter for simcall comm_testany.
authorArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Tue, 19 Feb 2019 21:03:42 +0000 (22:03 +0100)
committerArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Wed, 20 Feb 2019 08:42:05 +0000 (09:42 +0100)
include/simgrid/simix.h
src/kernel/activity/CommImpl.cpp
src/mc/mc_request.cpp
src/mc/mc_state.cpp
src/simix/libsmx.cpp
src/simix/popping_accessors.hpp
src/simix/popping_bodies.cpp
src/simix/popping_generated.cpp
src/simix/simcalls.in

index c8d991d..c671930 100644 (file)
@@ -229,7 +229,7 @@ XBT_PUBLIC smx_activity_t simcall_comm_iprobe(smx_mailbox_t mbox, int type,
 XBT_PUBLIC unsigned int simcall_comm_waitany(smx_activity_t* comms, size_t count, double timeout);
 XBT_PUBLIC void simcall_comm_wait(const smx_activity_t& comm, double timeout);
 XBT_PUBLIC int simcall_comm_test(const smx_activity_t& comm);
-XBT_PUBLIC int simcall_comm_testany(smx_activity_t* comms, size_t count);
+XBT_PUBLIC int simcall_comm_testany(smx_activity_t comms[], size_t count);
 #endif
 
 /************************** Synchro simcalls **********************************/
index 36bfd5e..deb61c1 100644 (file)
@@ -252,8 +252,7 @@ void simcall_HANDLER_comm_test(smx_simcall_t simcall, simgrid::kernel::activity:
   }
 }
 
-void simcall_HANDLER_comm_testany(smx_simcall_t simcall, simgrid::kernel::activity::ActivityImplPtr comms[],
-                                  size_t count)
+void simcall_HANDLER_comm_testany(smx_simcall_t simcall, simgrid::kernel::activity::CommImpl* comms[], size_t count)
 {
   // The default result is -1 -- this means, "nothing is ready".
   // It can be changed below, but only if something matches.
@@ -264,21 +263,21 @@ void simcall_HANDLER_comm_testany(smx_simcall_t simcall, simgrid::kernel::activi
     if (idx == -1) {
       SIMIX_simcall_answer(simcall);
     } else {
-      simgrid::kernel::activity::ActivityImplPtr synchro = comms[idx];
+      simgrid::kernel::activity::CommImpl* comm = comms[idx];
       simcall_comm_testany__set__result(simcall, idx);
-      synchro->simcalls_.push_back(simcall);
-      synchro->state_ = SIMIX_DONE;
-      boost::static_pointer_cast<simgrid::kernel::activity::CommImpl>(synchro)->finish();
+      comm->simcalls_.push_back(simcall);
+      comm->state_ = SIMIX_DONE;
+      comm->finish();
     }
     return;
   }
 
   for (std::size_t i = 0; i != count; ++i) {
-    simgrid::kernel::activity::ActivityImplPtr synchro = comms[i];
-    if (synchro->state_ != SIMIX_WAITING && synchro->state_ != SIMIX_RUNNING) {
+    simgrid::kernel::activity::ActivityImplPtr comm = comms[i];
+    if (comm->state_ != SIMIX_WAITING && comm->state_ != SIMIX_RUNNING) {
       simcall_comm_testany__set__result(simcall, i);
-      synchro->simcalls_.push_back(simcall);
-      boost::static_pointer_cast<simgrid::kernel::activity::CommImpl>(synchro)->finish();
+      comm->simcalls_.push_back(simcall);
+      comm->finish();
       return;
     }
   }
index 3d5d088..2eec09d 100644 (file)
@@ -386,7 +386,7 @@ bool request_is_enabled_by_idx(smx_simcall_t req, unsigned int idx)
     break;
 
   case SIMCALL_COMM_TESTANY:
-    remote_act = mc_model_checker->process().read(remote(simcall_comm_testany__getraw__comms(req) + idx));
+    remote_act = mc_model_checker->process().read(remote(simcall_comm_testany__get__comms(req) + idx));
     break;
 
   default:
index 14813de..68440e0 100644 (file)
@@ -166,10 +166,9 @@ static inline smx_simcall_t MC_state_get_request_for_process(simgrid::mc::State*
     state->internal_req.call = SIMCALL_COMM_TEST;
 
     if (state->transition.argument > 0) {
-      simgrid::kernel::activity::ActivityImpl* remote_comm = mc_model_checker->process().read(
-          remote(simcall_comm_testany__getraw__comms(req) + state->transition.argument));
-      mc_model_checker->process().read(state->internal_comm,
-                                       remote(static_cast<simgrid::kernel::activity::CommImpl*>(remote_comm)));
+      simgrid::kernel::activity::CommImpl* remote_comm =
+          mc_model_checker->process().read(remote(simcall_comm_testany__get__comms(req) + state->transition.argument));
+      mc_model_checker->process().read(state->internal_comm, remote(remote_comm));
     }
 
     simcall_comm_test__set__comm(&state->internal_req, state->internal_comm.getBuffer());
index 93f9529..c7f7d2c 100644 (file)
@@ -223,11 +223,15 @@ unsigned int simcall_comm_waitany(smx_activity_t* comms, size_t count, double ti
 /**
  * @ingroup simix_comm_management
  */
-int simcall_comm_testany(smx_activity_t* comms, size_t count)
+int simcall_comm_testany(smx_activity_t comms[], size_t count)
 {
   if (count == 0)
     return -1;
-  return simcall_BODY_comm_testany(comms, count);
+  std::unique_ptr<simgrid::kernel::activity::CommImpl* []> rcomms(new simgrid::kernel::activity::CommImpl*[count]);
+  std::transform(comms, comms + count, rcomms.get(), [](const smx_activity_t comm) {
+    return static_cast<simgrid::kernel::activity::CommImpl*>(comm.get());
+  });
+  return simcall_BODY_comm_testany(rcomms.get(), count);
 }
 
 /**
index 0e08a06..50de5c8 100644 (file)
@@ -727,17 +727,17 @@ static inline void simcall_comm_test__set__result(smx_simcall_t simcall, int res
   simgrid::simix::marshal<int>(simcall->result, result);
 }
 
-static inline boost::intrusive_ptr<simgrid::kernel::activity::ActivityImpl>* simcall_comm_testany__get__comms(smx_simcall_t simcall)
+static inline simgrid::kernel::activity::CommImpl** simcall_comm_testany__get__comms(smx_simcall_t simcall)
 {
-  return simgrid::simix::unmarshal<boost::intrusive_ptr<simgrid::kernel::activity::ActivityImpl>*>(simcall->args[0]);
+  return simgrid::simix::unmarshal<simgrid::kernel::activity::CommImpl**>(simcall->args[0]);
 }
-static inline simgrid::kernel::activity::ActivityImpl** simcall_comm_testany__getraw__comms(smx_simcall_t simcall)
+static inline simgrid::kernel::activity::CommImpl** simcall_comm_testany__getraw__comms(smx_simcall_t simcall)
 {
-  return simgrid::simix::unmarshal_raw<simgrid::kernel::activity::ActivityImpl**>(simcall->args[0]);
+  return simgrid::simix::unmarshal_raw<simgrid::kernel::activity::CommImpl**>(simcall->args[0]);
 }
-static inline void simcall_comm_testany__set__comms(smx_simcall_t simcall, boost::intrusive_ptr<simgrid::kernel::activity::ActivityImpl>* arg)
+static inline void simcall_comm_testany__set__comms(smx_simcall_t simcall, simgrid::kernel::activity::CommImpl** arg)
 {
-  simgrid::simix::marshal<boost::intrusive_ptr<simgrid::kernel::activity::ActivityImpl>*>(simcall->args[0], arg);
+  simgrid::simix::marshal<simgrid::kernel::activity::CommImpl**>(simcall->args[0], arg);
 }
 static inline size_t simcall_comm_testany__get__count(smx_simcall_t simcall)
 {
@@ -1044,7 +1044,8 @@ XBT_PRIVATE void simcall_HANDLER_comm_waitany(smx_simcall_t simcall,
 XBT_PRIVATE void simcall_HANDLER_comm_wait(smx_simcall_t simcall, simgrid::kernel::activity::CommImpl* comm,
                                            double timeout);
 XBT_PRIVATE void simcall_HANDLER_comm_test(smx_simcall_t simcall, simgrid::kernel::activity::CommImpl* comm);
-XBT_PRIVATE void simcall_HANDLER_comm_testany(smx_simcall_t simcall, boost::intrusive_ptr<simgrid::kernel::activity::ActivityImpl>* comms, size_t count);
+XBT_PRIVATE void simcall_HANDLER_comm_testany(smx_simcall_t simcall, simgrid::kernel::activity::CommImpl** comms,
+                                              size_t count);
 XBT_PRIVATE void simcall_HANDLER_mutex_lock(smx_simcall_t simcall, smx_mutex_t mutex);
 XBT_PRIVATE int simcall_HANDLER_mutex_trylock(smx_simcall_t simcall, smx_mutex_t mutex);
 XBT_PRIVATE void simcall_HANDLER_mutex_unlock(smx_simcall_t simcall, smx_mutex_t mutex);
index 7e43ac8..894e575 100644 (file)
@@ -122,11 +122,11 @@ inline static int simcall_BODY_comm_test(simgrid::kernel::activity::CommImpl* co
   return simcall<int, simgrid::kernel::activity::CommImpl*>(SIMCALL_COMM_TEST, comm);
 }
 
-inline static int simcall_BODY_comm_testany(boost::intrusive_ptr<simgrid::kernel::activity::ActivityImpl>* comms, size_t count)
+inline static int simcall_BODY_comm_testany(simgrid::kernel::activity::CommImpl** comms, size_t count)
 {
   if (0) /* Go to that function to follow the code flow through the simcall barrier */
     simcall_HANDLER_comm_testany(&SIMIX_process_self()->simcall, comms, count);
-  return simcall<int, boost::intrusive_ptr<simgrid::kernel::activity::ActivityImpl>*, size_t>(SIMCALL_COMM_TESTANY, comms, count);
+  return simcall<int, simgrid::kernel::activity::CommImpl**, size_t>(SIMCALL_COMM_TESTANY, comms, count);
 }
 
 inline static void simcall_BODY_mutex_lock(smx_mutex_t mutex)
index 3dcae88..bba0c71 100644 (file)
@@ -121,7 +121,9 @@ case SIMCALL_COMM_TEST:
   break;
 
 case SIMCALL_COMM_TESTANY:
-  simcall_HANDLER_comm_testany(simcall, simgrid::simix::unmarshal<boost::intrusive_ptr<simgrid::kernel::activity::ActivityImpl>*>(simcall->args[0]), simgrid::simix::unmarshal<size_t>(simcall->args[1]));
+  simcall_HANDLER_comm_testany(simcall,
+                               simgrid::simix::unmarshal<simgrid::kernel::activity::CommImpl**>(simcall->args[0]),
+                               simgrid::simix::unmarshal<size_t>(simcall->args[1]));
   break;
 
 case SIMCALL_MUTEX_LOCK:
index f0139db..534a973 100644 (file)
@@ -49,7 +49,7 @@ boost::intrusive_ptr<simgrid::kernel::activity::ActivityImpl> comm_irecv(smx_act
 int            comm_waitany(boost::intrusive_ptr<simgrid::kernel::activity::ActivityImpl>* comms, size_t count, double timeout) [[block]];
 void           comm_wait(simgrid::kernel::activity::CommImpl* comm, double timeout) [[block]];
 int            comm_test(simgrid::kernel::activity::CommImpl* comm) [[block]];
-int            comm_testany(boost::intrusive_ptr<simgrid::kernel::activity::ActivityImpl>* comms, size_t count) [[block]];
+int            comm_testany(simgrid::kernel::activity::CommImpl** comms, size_t count) [[block]];
 
 void        mutex_lock(smx_mutex_t mutex) [[block]];
 int         mutex_trylock(smx_mutex_t mutex);