X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/99a8e224b5973a2cae9e379c140ceaa9c5a467f4..21446da234b79358c6f7ed918e582e7e5a36d8b3:/src/mc/Process.hpp diff --git a/src/mc/Process.hpp b/src/mc/Process.hpp index b709c33779..10bd3b547d 100644 --- a/src/mc/Process.hpp +++ b/src/mc/Process.hpp @@ -33,6 +33,7 @@ #include "src/mc/mc_forward.hpp" #include "src/mc/mc_base.h" +#include "src/mc/RemotePtr.hpp" #include "src/mc/AddressSpace.hpp" #include "src/mc/mc_protocol.h" #include "src/mc/ObjectInformation.hpp" @@ -44,7 +45,7 @@ namespace mc { class SimixProcessInformation { public: /** MCed address of the process */ - void* address = nullptr; + RemotePtr address = nullptr; union { /** (Flat) Copy of the process data structure */ struct s_smx_process copy; @@ -75,8 +76,8 @@ struct IgnoredHeapRegion { /** Representation of a process * - * This class is mixing a lot of differents responsabilities and is tied - * to SIMIX. It should probably split into different classes. + * This class is mixing a lot of different responsabilities and is tied + * to SIMIX. It should probably be split into different classes. * * Responsabilities: * @@ -177,9 +178,6 @@ public: running_ = false; } - void reset_soft_dirty(); - void read_pagemap(uint64_t* pagemap, size_t start_page, size_t page_count); - bool privatized(ObjectInformation const& info) const { return privatized_ && info.executable(); @@ -217,6 +215,34 @@ public: std::vector& simix_processes(); std::vector& old_simix_processes(); + /** Get a local description of a remote SIMIX process */ + simgrid::mc::SimixProcessInformation* resolveProcessInfo( + simgrid::mc::RemotePtr process) + { + xbt_assert(mc_mode == MC_MODE_SERVER); + if (!process) + return nullptr; + this->refresh_simix(); + for (auto& process_info : this->smx_process_infos) + if (process_info.address == process) + return &process_info; + for (auto& process_info : this->smx_old_process_infos) + if (process_info.address == process) + return &process_info; + return nullptr; + } + + /** Get a local copy of the SIMIX process structure */ + smx_process_t resolveProcess(simgrid::mc::RemotePtr process) + { + simgrid::mc::SimixProcessInformation* process_info = + this->resolveProcessInfo(process); + if (process_info) + return &process_info->copy; + else + return nullptr; + } + void dumpStack(); private: @@ -233,8 +259,6 @@ private: RemotePtr maestro_stack_start_, maestro_stack_end_; int memory_file = -1; std::vector ignored_regions_; - int clear_refs_fd_ = -1; - int pagemap_fd_ = -1; bool privatized_ = false; std::vector stack_areas_; std::vector ignored_heap_;