X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/0319431d6c2e70971f907c27e584d194104c7bb3..c7d4536a8384832da2a1d7b9bb9109100aaa0eb2:/src/mc/mc_smx.cpp diff --git a/src/mc/mc_smx.cpp b/src/mc/mc_smx.cpp index 09571a13cd..85039bf283 100644 --- a/src/mc/mc_smx.cpp +++ b/src/mc/mc_smx.cpp @@ -5,16 +5,21 @@ * under the terms of the license (GNU LGPL) which comes with this package. */ #include +#include #include +#include +#include +#include #include #include #include #include -#include "src/simix/smx_private.h" +#include +#include "src/simix/smx_private.h" #include "src/mc/mc_smx.h" #include "src/mc/ModelChecker.hpp" @@ -45,13 +50,14 @@ simgrid::mc::SimixProcessInformation* process_info_cast(smx_process_t p) */ static void MC_process_refresh_simix_process_list( simgrid::mc::Process* process, - std::vector& target, xbt_swag_t remote_swag) + std::vector& target, + simgrid::mc::RemotePtr remote_swag) { target.clear(); // swag = REMOTE(*simix_global->process_list) s_xbt_swag_t swag; - process->read_bytes(&swag, sizeof(swag), remote(remote_swag)); + process->read_bytes(&swag, sizeof(swag), remote_swag); // Load each element of the vector from the MCed process: int i = 0; @@ -79,19 +85,27 @@ void Process::refresh_simix() // TODO, avoid to reload `&simix_global`, `simix_global`, `*simix_global` - // simix_global_p = REMOTE(simix_global); - smx_global_t simix_global_p; - this->read_variable("simix_global", &simix_global_p, sizeof(simix_global_p)); + static_assert(std::is_same< + std::unique_ptr, + decltype(simix_global) + >::value, "Unexpected type for simix_global"); + static_assert(sizeof(simix_global) == sizeof(simgrid::simix::Global*), + "Bad size for simix_global"); + + // simix_global_p = REMOTE(simix_global.get()); + RemotePtr simix_global_p = + this->read_variable("simix_global"); // simix_global = REMOTE(*simix_global) - union { simgrid::simix::Global simix_global }; - this->read_bytes(&simix_global, sizeof(simix_global), - remote(simix_global_p)); + Remote simix_global = + this->read(simix_global_p); MC_process_refresh_simix_process_list( - this, this->smx_process_infos, simix_global.process_list); + this, this->smx_process_infos, + remote(simix_global.getBuffer()->process_list)); MC_process_refresh_simix_process_list( - this, this->smx_old_process_infos, simix_global.process_to_destroy); + this, this->smx_old_process_infos, + remote(simix_global.getBuffer()->process_to_destroy)); this->cache_flags_ |= Process::cache_simix_processes; }