X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/533b09bd161a7a8bef036a14bbcb8793286b9d9f..0b63f78dc217b79305cef05bd2200069d3e24475:/src/simix/ActorImpl.cpp diff --git a/src/simix/ActorImpl.cpp b/src/simix/ActorImpl.cpp index 87965c9fda..d2b51d4e41 100644 --- a/src/simix/ActorImpl.cpp +++ b/src/simix/ActorImpl.cpp @@ -145,6 +145,7 @@ void SIMIX_process_empty_trash() } namespace simgrid { + namespace simix { ActorImpl::~ActorImpl() @@ -221,7 +222,7 @@ smx_activity_t ActorImpl::suspend(ActorImpl* issuer) return nullptr; } else { - return SIMIX_execution_start(this, "suspend", 0.0, 1.0, 0.0, this->host); + return SIMIX_execution_start("suspend", 0.0, 1.0, 0.0, this->host); } } @@ -321,16 +322,6 @@ smx_actor_t SIMIX_process_create(const char* name, std::function code, v if (parent_process != nullptr) { process->ppid = parent_process->pid; -/* SMPI process have their own data segment and each other inherit from their father */ -#if HAVE_SMPI - if (smpi_privatize_global_variables == SMPI_PRIVATIZE_MMAP) { - if (parent_process->pid != 0) { - process->segment_index = parent_process->segment_index; - } else { - process->segment_index = process->pid - 1; - } - } -#endif } process->code = code; @@ -347,7 +338,7 @@ smx_actor_t SIMIX_process_create(const char* name, std::function code, v if (host->extension() == nullptr) host->extension_set(new simgrid::simix::Host()); - /* Add the process to its host process list */ + /* Add the process to its host's process list */ host->extension()->process_list.push_back(*process); XBT_DEBUG("Start context '%s'", process->name.c_str()); @@ -360,6 +351,12 @@ smx_actor_t SIMIX_process_create(const char* name, std::function code, v /* Tracing the process creation */ TRACE_msg_process_create(process->getName(), process->pid, process->host); + /* Note by cheinrich: If you move this directly after the "new ActorImpl", the pid + * will not yet be set and you will cause issues when other code relies on that. + * This is of course also true for the other properties, so I moved this here. + */ + simgrid::s4u::ActorPtr tmp = process->iface(); // Passing this directly to onCreation will lead to crashes + simgrid::s4u::Actor::onCreation(tmp); return process; } @@ -388,16 +385,6 @@ smx_actor_t SIMIX_process_attach(const char* name, void* data, const char* hostn if (parent_process != nullptr) { process->ppid = parent_process->pid; - /* SMPI process have their own data segment and each other inherit from their father */ -#if HAVE_SMPI - if (smpi_privatize_global_variables == SMPI_PRIVATIZE_MMAP) { - if (parent_process->pid != 0) { - process->segment_index = parent_process->segment_index; - } else { - process->segment_index = process->pid - 1; - } - } -#endif } /* Process data for auto-restart */ @@ -607,12 +594,12 @@ void SIMIX_process_killall(smx_actor_t issuer, int reset_pid) simix_process_maxpid = reset_pid; } -void SIMIX_process_change_host(smx_actor_t process, sg_host_t dest) +void SIMIX_process_change_host(smx_actor_t actor, sg_host_t dest) { - xbt_assert((process != nullptr), "Invalid parameters"); - simgrid::xbt::intrusive_erase(process->host->extension()->process_list, *process); - process->host = dest; - dest->extension()->process_list.push_back(*process); + xbt_assert((actor != nullptr), "Invalid parameters"); + simgrid::xbt::intrusive_erase(actor->host->extension()->process_list, *actor); + actor->host = dest; + dest->extension()->process_list.push_back(*actor); } void simcall_HANDLER_process_suspend(smx_simcall_t simcall, smx_actor_t process) @@ -744,11 +731,6 @@ void SIMIX_process_yield(smx_actor_t self) /* Ok, maestro returned control to us */ XBT_DEBUG("Control returned to me: '%s'", self->name.c_str()); - if (self->new_host) { - SIMIX_process_change_host(self, self->new_host); - self->new_host = nullptr; - } - if (self->context->iwannadie){ XBT_DEBUG("I wanna die!"); self->finished = true; @@ -778,8 +760,8 @@ void SIMIX_process_yield(smx_actor_t self) std::rethrow_exception(std::move(exception)); } - if(SMPI_switch_data_segment && self->segment_index != -1){ - SMPI_switch_data_segment(self->segment_index); + if(SMPI_switch_data_segment){ + SMPI_switch_data_segment(self->pid); } }