Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[codacy/cppcheck] A few more issues.
authorArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Mon, 4 Feb 2019 10:01:22 +0000 (11:01 +0100)
committerFrederic Suter <frederic.suter@cc.in2p3.fr>
Mon, 4 Feb 2019 10:41:09 +0000 (11:41 +0100)
src/simix/ActorImpl.cpp
src/simix/ActorImpl.hpp
src/smpi/colls/coll_tuned_topo.cpp
src/smpi/colls/smpi_mvapich2_selector.cpp
src/surf/HostImpl.cpp
src/surf/sg_platf.cpp
teshsuite/msg/host_on_off_processes/host_on_off_processes.tesh

index 3b16efa..cfec902 100644 (file)
@@ -149,8 +149,8 @@ simgrid::s4u::Actor* ActorImpl::restart()
   SIMIX_process_kill(this, (this == simix_global->maestro_process) ? this : SIMIX_process_self());
 
   // start the new process
-  ActorImpl* actor =
-      SIMIX_process_create(arg.name, std::move(arg.code), arg.data, arg.host, arg.properties.get(), nullptr);
+  ActorImplPtr actor =
+      ActorImpl::create(arg.name, std::move(arg.code), arg.data, arg.host, arg.properties.get(), nullptr);
   actor->set_kill_time(arg.kill_time);
   actor->set_auto_restart(arg.auto_restart);
 
@@ -262,78 +262,69 @@ void ActorImpl::throw_exception(std::exception_ptr e)
   waiting_synchro = nullptr;
 }
 
-void create_maestro(simgrid::simix::ActorCode code)
-{
-  /* Create maestro process and initialize it */
-  smx_actor_t maestro = new simgrid::kernel::actor::ActorImpl(simgrid::xbt::string(""), /*host*/ nullptr);
-
-  if (not code) {
-    maestro->context_ = SIMIX_context_new(simgrid::simix::ActorCode(), nullptr, maestro);
-  } else {
-    maestro->context_ = simix_global->context_factory->create_maestro(code, maestro);
-  }
-
-  maestro->simcall.issuer = maestro;
-  simix_global->maestro_process = maestro;
-}
-
-} // namespace actor
-}
-}
-
-/**
- * @brief Internal function to create a process.
- *
- * This function actually creates the process.
- * It may be called when a SIMCALL_PROCESS_CREATE simcall occurs,
- * or directly for SIMIX internal purposes. The sure thing is that it's called from maestro context.
- *
- * @return the process created
- */
-smx_actor_t SIMIX_process_create(std::string name, simgrid::simix::ActorCode code, void* data, simgrid::s4u::Host* host,
-                                 std::unordered_map<std::string, std::string>* properties, smx_actor_t parent_process)
+ActorImplPtr ActorImpl::create(std::string name, simgrid::simix::ActorCode code, void* data, simgrid::s4u::Host* host,
+                               std::unordered_map<std::string, std::string>* properties, smx_actor_t parent_actor)
 {
 
   XBT_DEBUG("Start actor %s@'%s'", name.c_str(), host->get_cname());
 
   if (host->is_off()) {
-    XBT_WARN("Cannot launch process '%s' on failed host '%s'", name.c_str(), host->get_cname());
+    XBT_WARN("Cannot launch actor '%s' on failed host '%s'", name.c_str(), host->get_cname());
     return nullptr;
   }
 
-  smx_actor_t process = new simgrid::kernel::actor::ActorImpl(simgrid::xbt::string(name), host);
+  ActorImpl* actor = new simgrid::kernel::actor::ActorImpl(simgrid::xbt::string(name), host);
 
   xbt_assert(code && host != nullptr, "Invalid parameters");
-  /* Process data */
-  process->set_user_data(data);
-  process->code = code;
+  /* actor data */
+  actor->set_user_data(data);
+  actor->code = code;
 
-  if (parent_process != nullptr)
-    process->ppid_ = parent_process->pid_;
+  if (parent_actor != nullptr)
+    actor->ppid_ = parent_actor->pid_;
 
-  XBT_VERB("Create context %s", process->get_cname());
-  process->context_ = SIMIX_context_new(std::move(code), &SIMIX_process_cleanup, process);
+  XBT_VERB("Create context %s", actor->get_cname());
+  actor->context_ = SIMIX_context_new(std::move(code), &SIMIX_process_cleanup, actor);
 
   /* Add properties */
   if (properties != nullptr)
     for (auto const& kv : *properties)
-      process->set_property(kv.first, kv.second);
+      actor->set_property(kv.first, kv.second);
 
   /* Add the process to its host's process list */
-  host->pimpl_->process_list_.push_back(*process);
+  host->pimpl_->process_list_.push_back(*actor);
 
-  XBT_DEBUG("Start context '%s'", process->get_cname());
+  XBT_DEBUG("Start context '%s'", actor->get_cname());
 
   /* Now insert it in the global process list and in the process to run list */
-  simix_global->process_list[process->pid_] = process;
-  XBT_DEBUG("Inserting %s(%s) in the to_run list", process->get_cname(), host->get_cname());
-  simix_global->process_to_run.push_back(process);
-  intrusive_ptr_add_ref(process);
+  simix_global->process_list[actor->pid_] = actor;
+  XBT_DEBUG("Inserting %s(%s) in the to_run list", actor->get_cname(), host->get_cname());
+  simix_global->process_to_run.push_back(actor);
+  intrusive_ptr_add_ref(actor);
 
   /* The on_creation() signal must be delayed until there, where the pid and everything is set */
-  simgrid::s4u::Actor::on_creation(process->iface());
+  simgrid::s4u::Actor::on_creation(actor->iface());
+
+  return ActorImplPtr(actor);
+}
+
+void create_maestro(simgrid::simix::ActorCode code)
+{
+  /* Create maestro process and initialize it */
+  smx_actor_t maestro = new simgrid::kernel::actor::ActorImpl(simgrid::xbt::string(""), /*host*/ nullptr);
+
+  if (not code) {
+    maestro->context_ = SIMIX_context_new(simgrid::simix::ActorCode(), nullptr, maestro);
+  } else {
+    maestro->context_ = simix_global->context_factory->create_maestro(code, maestro);
+  }
+
+  maestro->simcall.issuer       = maestro;
+  simix_global->maestro_process = maestro;
+}
 
-  return process;
+} // namespace actor
+} // namespace kernel
 }
 
 smx_actor_t SIMIX_process_attach(const char* name, void* data, const char* hostname,
@@ -759,7 +750,7 @@ smx_actor_t simcall_process_create(std::string name, simgrid::simix::ActorCode c
 {
   smx_actor_t self = SIMIX_process_self();
   return simgrid::simix::simcall([name, code, data, host, properties, self] {
-    return SIMIX_process_create(name, std::move(code), data, host, properties, self);
+    return simgrid::kernel::actor::ActorImpl::create(name, std::move(code), data, host, properties, self).get();
   });
 }
 
index 6bb14de..e258c5c 100644 (file)
@@ -92,6 +92,9 @@ public:
 private:
   bool daemon_ = false;
 public:
+  static ActorImplPtr create(std::string name, simix::ActorCode code, void* data, s4u::Host* host,
+                             std::unordered_map<std::string, std::string>* properties, smx_actor_t parent_actor);
+
   void daemonize();
   bool is_daemon() { return daemon_; } /** Whether this actor has been daemonized */
   bool is_suspended() { return suspended_; }
@@ -154,10 +157,6 @@ XBT_PUBLIC void create_maestro(std::function<void()> code);
 
 typedef simgrid::kernel::actor::ActorImpl* smx_actor_t;
 
-XBT_PRIVATE smx_actor_t SIMIX_process_create(std::string name, std::function<void()> code, void* data, sg_host_t host,
-                                             std::unordered_map<std::string, std::string>* properties,
-                                             smx_actor_t parent_process);
-
 XBT_PRIVATE void SIMIX_process_runall();
 XBT_PRIVATE void SIMIX_process_kill(smx_actor_t process, smx_actor_t issuer);
 XBT_PRIVATE void SIMIX_process_killall(smx_actor_t issuer);
index 27f20da..0236803 100644 (file)
@@ -380,6 +380,7 @@ ompi_coll_tuned_topo_build_bmtree( MPI_Comm comm,
         if( remote >= size ) remote -= size;
         if (childs==MAXTREEFANOUT) {
             XBT_DEBUG("coll:tuned:topo:build_bmtree max fanout incorrect %d needed %d", MAXTREEFANOUT, childs);
+            delete bmtree;
             return NULL;
         }
         bmtree->tree_next[childs] = remote;
@@ -427,6 +428,7 @@ ompi_coll_tree_t* ompi_coll_tuned_topo_build_in_order_bmtree(MPI_Comm comm, int
     bmtree = new ompi_coll_tree_t;
     if (not bmtree) {
       XBT_DEBUG("coll:tuned:topo:build_bmtree PANIC out of memory");
+      delete bmtree;
       return NULL;
     }
 
index f3c697b..e755f00 100644 (file)
@@ -201,16 +201,15 @@ int Coll_gather_mvapich2::gather(void *sendbuf,
   int range_threshold = 0;
   int range_intra_threshold = 0;
   long nbytes = 0;
-  int recvtype_size, sendtype_size;
   int comm_size = comm->size();
   int rank      = comm->rank();
 
   if (rank == root) {
-      recvtype_size=recvtype->size();
-      nbytes = recvcnt * recvtype_size;
+    int recvtype_size = recvtype->size();
+    nbytes            = recvcnt * recvtype_size;
   } else {
-      sendtype_size=sendtype->size();
-      nbytes = sendcnt * sendtype_size;
+    int sendtype_size = sendtype->size();
+    nbytes            = sendcnt * sendtype_size;
   }
 
   /* Search for the corresponding system size inside the tuning table */
@@ -896,12 +895,12 @@ int Coll_scatter_mvapich2::scatter(void *sendbuf,
     if (comm->is_uniform()) {
 
         shmem_comm = comm->get_intra_comm();
-        int local_size = shmem_comm->size();
-        int i          = 0;
         if (mv2_scatter_table_ppn_conf[0] == -1) {
             // Indicating user defined tuning
             conf_index = 0;
         }else{
+          int local_size = shmem_comm->size();
+          int i          = 0;
             do {
                 if (local_size == mv2_scatter_table_ppn_conf[i]) {
                     conf_index = i;
index 47154c6..42e84f1 100644 (file)
@@ -103,8 +103,8 @@ void HostImpl::turn_on()
 {
   for (auto const& arg : actors_at_boot_) {
     XBT_DEBUG("Booting Actor %s(%s) right now", arg->name.c_str(), arg->host->get_cname());
-    smx_actor_t actor =
-        SIMIX_process_create(arg->name.c_str(), arg->code, nullptr, arg->host, arg->properties.get(), nullptr);
+    simgrid::kernel::actor::ActorImplPtr actor = simgrid::kernel::actor::ActorImpl::create(
+        arg->name.c_str(), arg->code, nullptr, arg->host, arg->properties.get(), nullptr);
     if (arg->kill_time >= 0)
       actor->set_kill_time(arg->kill_time);
     if (arg->auto_restart)
index d4872dc..bc82d2d 100644 (file)
@@ -452,8 +452,8 @@ void sg_platf_new_actor(simgrid::kernel::routing::ActorCreationArgs* actor)
 
     XBT_DEBUG("Process %s@%s will be started at time %f", arg->name.c_str(), arg->host->get_cname(), start_time);
     SIMIX_timer_set(start_time, [arg, auto_restart]() {
-      smx_actor_t actor = SIMIX_process_create(arg->name.c_str(), std::move(arg->code), arg->data, arg->host,
-                                               arg->properties.get(), nullptr);
+      simgrid::kernel::actor::ActorImplPtr actor = simgrid::kernel::actor::ActorImpl::create(
+          arg->name.c_str(), std::move(arg->code), arg->data, arg->host, arg->properties.get(), nullptr);
       if (arg->kill_time >= 0)
         actor->set_kill_time(arg->kill_time);
       if (auto_restart)
@@ -463,8 +463,8 @@ void sg_platf_new_actor(simgrid::kernel::routing::ActorCreationArgs* actor)
   } else {                      // start_time <= SIMIX_get_clock()
     XBT_DEBUG("Starting Process %s(%s) right now", arg->name.c_str(), host->get_cname());
 
-    smx_actor_t actor =
-        SIMIX_process_create(arg->name.c_str(), std::move(code), nullptr, host, arg->properties.get(), nullptr);
+    simgrid::kernel::actor::ActorImplPtr actor = simgrid::kernel::actor::ActorImpl::create(
+        arg->name.c_str(), std::move(code), nullptr, host, arg->properties.get(), nullptr);
 
     /* The actor creation will fail if the host is currently dead, but that's fine */
     if (actor != nullptr) {
index 8a8b212..e4dfcfb 100644 (file)
@@ -15,7 +15,7 @@ $ ${bindir}/host_on_off_processes ${platfdir}/small_platform.xml 1 --log=no_loc
 $ ${bindir}/host_on_off_processes ${platfdir}/small_platform.xml 2 --log=no_loc
 > [Tremblay:test_launcher:(1) 0.000000] [msg_test/INFO] Test 2:
 > [Tremblay:test_launcher:(1) 0.000000] [msg_test/INFO]   Turn off Jupiter
-> [0.000000] [simix_process/WARNING] Cannot launch process 'process_daemon' on failed host 'Jupiter'
+> [0.000000] [simix_process/WARNING] Cannot launch actor 'process_daemon' on failed host 'Jupiter'
 > [Tremblay:test_launcher:(1) 10.000000] [msg_test/INFO]   Test 2 does not crash as it should (number of Process : 1, it should be 1)
 > [Tremblay:test_launcher:(1) 10.000000] [msg_test/INFO]   Ok so let's turn on/off the node to see whether the process is correctly bound to Jupiter
 > [Tremblay:test_launcher:(1) 10.000000] [msg_test/INFO]   Turn off