From: Gabriel Corona Date: Mon, 14 Mar 2016 09:12:29 +0000 (+0100) Subject: [mc] Make Process:cache_flags private X-Git-Tag: v3_13~428^2~2 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/864d17d38d2f5ffecea2c9104af9e538a25b56db [mc] Make Process:cache_flags private --- diff --git a/src/mc/ModelChecker.cpp b/src/mc/ModelChecker.cpp index bc69fbe034..6ff138a051 100644 --- a/src/mc/ModelChecker.cpp +++ b/src/mc/ModelChecker.cpp @@ -176,7 +176,7 @@ void ModelChecker::resume(simgrid::mc::Process& process) int res = process.getChannel().send(MC_MESSAGE_CONTINUE); if (res) throw simgrid::xbt::errno_error(res); - process.cache_flags = (mc_process_cache_flags_t) 0; + process.clear_cache(); } static @@ -434,7 +434,7 @@ void ModelChecker::simcall_handle(simgrid::mc::Process& process, unsigned long p m.pid = pid; m.value = value; process.getChannel().send(m); - process.cache_flags = (mc_process_cache_flags_t) 0; + process.clear_cache(); while (process.running()) if (!this->handle_events()) return; diff --git a/src/mc/Process.cpp b/src/mc/Process.cpp index 3f06a40b42..1c003948d2 100644 --- a/src/mc/Process.cpp +++ b/src/mc/Process.cpp @@ -262,7 +262,7 @@ void Process::refresh_heap() this->heap = std::unique_ptr(new s_xbt_mheap_t()); this->read_bytes(this->heap.get(), sizeof(struct mdesc), remote(this->heap_address), simgrid::mc::ProcessIndexDisabled); - this->cache_flags |= MC_PROCESS_CACHE_FLAG_HEAP; + this->cache_flags_ |= Process::cache_heap; } /** Refresh the information about the process @@ -273,15 +273,15 @@ void Process::refresh_heap() void Process::refresh_malloc_info() { xbt_assert(mc_mode == MC_MODE_SERVER); - if (!(this->cache_flags & MC_PROCESS_CACHE_FLAG_HEAP)) - this->refresh_heap(); // Refresh process->heapinfo: + if (this->cache_flags_ & Process::cache_malloc) + return; size_t count = this->heap->heaplimit + 1; if (this->heap_info.size() < count) this->heap_info.resize(count); this->read_bytes(this->heap_info.data(), count * sizeof(malloc_info), remote(this->heap->heapinfo), simgrid::mc::ProcessIndexDisabled); - this->cache_flags |= MC_PROCESS_CACHE_FLAG_MALLOC_INFO; + this->cache_flags_ |= Process::cache_malloc; } /** @brief Finds the range of the different memory segments and binary paths */ diff --git a/src/mc/Process.hpp b/src/mc/Process.hpp index 36ef9944e3..2b5383783c 100644 --- a/src/mc/Process.hpp +++ b/src/mc/Process.hpp @@ -37,13 +37,6 @@ #include "src/mc/mc_protocol.h" #include "src/mc/ObjectInformation.hpp" -// Those flags are used to track down which cached information -// is still up to date and which information needs to be updated. -typedef int mc_process_cache_flags_t; -#define MC_PROCESS_CACHE_FLAG_NONE 0 -#define MC_PROCESS_CACHE_FLAG_HEAP 1 -#define MC_PROCESS_CACHE_FLAG_MALLOC_INFO 2 -#define MC_PROCESS_CACHE_FLAG_SIMIX_PROCESSES 4 namespace simgrid { namespace mc { @@ -96,6 +89,13 @@ struct IgnoredHeapRegion { * - etc. */ class Process final : public AddressSpace { +private: + // Those flags are used to track down which cached information + // is still up to date and which information needs to be updated. + static constexpr int cache_none = 0; + static constexpr int cache_heap = 1; + static constexpr int cache_malloc = 2; + static constexpr int cache_simix_processes = 4; public: Process(pid_t pid, int sockfd); ~Process(); @@ -135,16 +135,21 @@ public: // Heap access: xbt_mheap_t get_heap() { - if (!(this->cache_flags & MC_PROCESS_CACHE_FLAG_HEAP)) + if (!(this->cache_flags_ & Process::cache_heap)) this->refresh_heap(); return this->heap.get(); } malloc_info* get_malloc_info() { - if (!(this->cache_flags & MC_PROCESS_CACHE_FLAG_MALLOC_INFO)) + if (!(this->cache_flags_ & Process::cache_malloc)) this->refresh_malloc_info(); return this->heap_info.data(); } + + void clear_cache() + { + this->cache_flags_ = Process::cache_none; + } Channel const& getChannel() const { return channel_; } Channel& getChannel() { return channel_; } @@ -251,9 +256,11 @@ public: // Copies of MCed SMX data structures */ std::vector smx_old_process_infos; +private: /** State of the cache (which variables are up to date) */ - mc_process_cache_flags_t cache_flags = MC_PROCESS_CACHE_FLAG_NONE; + int cache_flags_ = Process::cache_none; +public: /** Address of the heap structure in the MCed process. */ void* heap_address; diff --git a/src/mc/mc_checkpoint.cpp b/src/mc/mc_checkpoint.cpp index 1c0c1cefad..77d6a73854 100644 --- a/src/mc/mc_checkpoint.cpp +++ b/src/mc/mc_checkpoint.cpp @@ -638,7 +638,7 @@ void restore_snapshot(mc_snapshot_t snapshot) if (use_soft_dirty) mc_model_checker->process().reset_soft_dirty(); snapshot_ignore_restore(snapshot); - mc_model_checker->process().cache_flags = 0; + mc_model_checker->process().clear_cache(); if (use_soft_dirty) mc_model_checker->parent_snapshot_ = snapshot; } diff --git a/src/mc/mc_smx.cpp b/src/mc/mc_smx.cpp index 04361857b8..78f86fe596 100644 --- a/src/mc/mc_smx.cpp +++ b/src/mc/mc_smx.cpp @@ -77,7 +77,7 @@ namespace mc { void Process::refresh_simix() { xbt_assert(mc_mode == MC_MODE_SERVER); - if (this->cache_flags & MC_PROCESS_CACHE_FLAG_SIMIX_PROCESSES) + if (this->cache_flags_ & Process::cache_simix_processes) return; // TODO, avoid to reload `&simix_global`, `simix_global`, `*simix_global` @@ -96,7 +96,7 @@ void Process::refresh_simix() MC_process_refresh_simix_process_list( this, this->smx_old_process_infos, simix_global.process_to_destroy); - this->cache_flags |= MC_PROCESS_CACHE_FLAG_SIMIX_PROCESSES; + this->cache_flags_ |= Process::cache_simix_processes; } }