X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/07483e97b12350d1d293f19689575f0fbdcf0246..0dda9bcd2d7df2c8141a8170a7cb8fe20746b4a9:/src/mc/mc_smx.cpp diff --git a/src/mc/mc_smx.cpp b/src/mc/mc_smx.cpp index 86303fc333..eaa7df96f4 100644 --- a/src/mc/mc_smx.cpp +++ b/src/mc/mc_smx.cpp @@ -3,22 +3,8 @@ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ -#include -#include -#include +#include "simgrid/s4u/Host.hpp" -#include -#include -#include -#include - -#include -#include -#include - -#include - -#include "src/simix/smx_private.h" #include "src/mc/mc_smx.h" #include "src/mc/ModelChecker.hpp" @@ -71,6 +57,29 @@ static void MC_process_refresh_simix_process_list(simgrid::mc::Process* process, assert(i == swag.count); } +static void MC_process_refresh_simix_actor_dynar(simgrid::mc::Process* process, + std::vector& target, + simgrid::mc::RemotePtr remote_dynar) +{ + target.clear(); + + s_xbt_dynar_t dynar; + process->read_bytes(&dynar, sizeof(dynar), remote_dynar); + + smx_actor_t* data = (smx_actor_t*)malloc(dynar.elmsize * dynar.used); + process->read_bytes(data, dynar.elmsize * dynar.used, dynar.data); + + // Load each element of the vector from the MCed process: + for (unsigned int i = 0; i < dynar.used; ++i) { + + simgrid::mc::ActorInformation info; + info.address = data[i]; + info.hostname = nullptr; + process->read_bytes(&info.copy, sizeof(info.copy), remote(data[i])); + target.push_back(std::move(info)); + } + free(data); +} namespace simgrid { namespace mc { @@ -96,7 +105,7 @@ void Process::refresh_simix() Remote simix_global = this->read(simix_global_p); - MC_process_refresh_simix_process_list(this, this->smx_actors_infos, remote(simix_global.getBuffer()->process_list)); + MC_process_refresh_simix_actor_dynar(this, this->smx_actors_infos, remote(simix_global.getBuffer()->actors_vector)); MC_process_refresh_simix_process_list(this, this->smx_dead_actors_infos, remote(simix_global.getBuffer()->process_to_destroy)); @@ -183,7 +192,7 @@ const char* MC_smx_actor_get_name(smx_actor_t actor) } #if HAVE_SMPI -int MC_smpi_process_count(void) +int MC_smpi_process_count() { if (mc_model_checker == nullptr) return smpi_process_count(); @@ -194,7 +203,7 @@ int MC_smpi_process_count(void) } #endif -unsigned long MC_smx_get_maxpid(void) +unsigned long MC_smx_get_maxpid() { unsigned long maxpid; mc_model_checker->process().read_variable("simix_process_maxpid",