X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/fd769219531a772284d75320187a0ef9f8118afd..3e921951f86a30e42dbdc73b9ce04f58db25cec9:/src/mc/Process.hpp diff --git a/src/mc/Process.hpp b/src/mc/Process.hpp index cd090fcdc2..36ef9944e3 100644 --- a/src/mc/Process.hpp +++ b/src/mc/Process.hpp @@ -22,9 +22,8 @@ #include #include -#if HAVE_MC #include "src/xbt/mmalloc/mmprivate.h" -#endif +#include "src/mc/Channel.hpp" #include #include "src/simix/popping_private.h" @@ -82,6 +81,19 @@ 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. + * + * Responsabilities: + * + * - reading from the process memory (`AddressSpace`); + * - accessing the system state of the porcess (heap, …); + * - storing the SIMIX state of the process; + * - privatization; + * - communication with the model-checked process; + * - stack unwinding; + * - etc. */ class Process final : public AddressSpace { public: @@ -134,6 +146,9 @@ public: return this->heap_info.data(); } + Channel const& getChannel() const { return channel_; } + Channel& getChannel() { return channel_; } + std::vector const& ignored_regions() const { return ignored_regions_; @@ -157,25 +172,6 @@ public: running_ = false; } - template - typename std::enable_if< std::is_class::value && std::is_trivial::value, int >::type - send_message(M const& m) - { - return MC_protocol_send(this->socket_, &m, sizeof(M)); - } - - int send_message(e_mc_message_type message_id) - { - return MC_protocol_send_simple_message(this->socket_, message_id); - } - - template - typename std::enable_if< std::is_class::value && std::is_trivial::value, ssize_t >::type - receive_message(M& m) - { - return MC_receive_message(this->socket_, &m, sizeof(M), 0); - } - void reset_soft_dirty(); void read_pagemap(uint64_t* pagemap, size_t start_page, size_t page_count); @@ -213,17 +209,18 @@ public: void unignore_heap(void *address, size_t size); void ignore_local_variable(const char *var_name, const char *frame_name); - int socket() { return socket_; } std::vector& simix_processes(); + std::vector& old_simix_processes(); private: void init_memory_map_info(); void refresh_heap(); void refresh_malloc_info(); + void refresh_simix(); private: pid_t pid_ = -1; - int socket_ = -1; + Channel channel_; bool running_ = false; std::vector memory_map_; RemotePtr maestro_stack_start_, maestro_stack_end_;