X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/d5c2b7aff3d496f7a2d9affc45b53044d03040b8..0b63f78dc217b79305cef05bd2200069d3e24475:/src/simix/ActorImpl.cpp diff --git a/src/simix/ActorImpl.cpp b/src/simix/ActorImpl.cpp index 7866fb050a..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() @@ -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 */ @@ -773,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); } }