Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
replace SIMIX_process_count by simgrid_get_actor_count
[simgrid.git] / src / kernel / actor / ActorImpl.cpp
index 8ac6401..6cea03b 100644 (file)
@@ -98,7 +98,7 @@ ActorImplPtr ActorImpl::attach(const std::string& name, void* data, s4u::Host* h
     actor->set_properties(*properties);
 
   /* Add the process to it's host process list */
-  host->pimpl_->process_list_.push_back(*actor);
+  host->pimpl_->add_actor(actor);
 
   /* Now insert it in the global process list and in the process to run list */
   simix_global->process_list[actor->get_pid()] = actor;
@@ -171,8 +171,8 @@ void ActorImpl::cleanup()
   simix_global->mutex.lock();
 
   simix_global->process_list.erase(pid_);
-  if (host_ && host_process_list_hook.is_linked())
-    simgrid::xbt::intrusive_erase(host_->pimpl_->process_list_, *this);
+  if (host_ && host_actor_list_hook.is_linked())
+    host_->pimpl_->remove_actor(this);
   if (not smx_destroy_list_hook.is_linked()) {
 #if SIMGRID_HAVE_MC
     xbt_dynar_push_as(simix_global->dead_actors_vector, ActorImpl*, this);
@@ -222,6 +222,7 @@ void ActorImpl::exit()
 
 void ActorImpl::kill(ActorImpl* actor)
 {
+  xbt_assert(actor != simix_global->maestro_process, "Killing maestro is a rather bad idea");
   if (actor->finished_) {
     XBT_DEBUG("Ignoring request to kill actor %s@%s that is already dead", actor->get_cname(),
               actor->host_->get_cname());
@@ -276,7 +277,6 @@ void ActorImpl::yield()
 
   if (context_->iwannadie) {
     XBT_DEBUG("Actor %s@%s is dead", get_cname(), host_->get_cname());
-    // throw simgrid::kernel::context::ForcefulKillException(); Does not seem to properly kill the actor
     context_->stop();
     THROW_IMPOSSIBLE;
   }
@@ -443,9 +443,9 @@ void ActorImpl::simcall_answer()
 
 void ActorImpl::set_host(s4u::Host* dest)
 {
-  xbt::intrusive_erase(host_->pimpl_->process_list_, *this);
+  host_->pimpl_->remove_actor(this);
   host_ = dest;
-  dest->pimpl_->process_list_.push_back(*this);
+  dest->pimpl_->add_actor(this);
 }
 
 ActorImplPtr ActorImpl::init(const std::string& name, s4u::Host* host)
@@ -477,7 +477,7 @@ ActorImpl* ActorImpl::start(const simix::ActorCode& code)
   XBT_DEBUG("Start context '%s'", get_cname());
 
   /* Add the actor to its host's actor list */
-  host_->pimpl_->process_list_.push_back(*this);
+  host_->pimpl_->add_actor(this);
   simix_global->process_list[pid_] = this;
 
   /* Now insert it in the global actor list and in the actor to run list */
@@ -529,11 +529,12 @@ void create_maestro(const std::function<void()>& code)
 } // namespace kernel
 } // namespace simgrid
 
-int SIMIX_process_count()
+int SIMIX_process_count() // XBT_ATTRIB_DEPRECATED_v329
 {
   return simix_global->process_list.size();
 }
 
+// XBT_DEPRECATED_v329
 void* SIMIX_process_self_get_data()
 {
   smx_actor_t self = SIMIX_process_self();
@@ -544,6 +545,7 @@ void* SIMIX_process_self_get_data()
   return self->get_user_data();
 }
 
+// XBT_DEPRECATED_v329
 void SIMIX_process_self_set_data(void* data)
 {
   SIMIX_process_self()->set_user_data(data);
@@ -553,12 +555,7 @@ void SIMIX_process_self_set_data(void* data)
    by exceptions and logging events */
 const char* SIMIX_process_self_get_name()
 {
-
-  smx_actor_t process = SIMIX_process_self();
-  if (process == nullptr || process == simix_global->maestro_process)
-    return "maestro";
-
-  return process->get_cname();
+  return SIMIX_is_maestro() ? "maestro" : SIMIX_process_self()->get_cname();
 }
 
 /**