X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/30d60b272963b1b130ea80840af783ee9c146b97..864d17d38d2f5ffecea2c9104af9e538a25b56db:/src/mc/Process.cpp diff --git a/src/mc/Process.cpp b/src/mc/Process.cpp index df6d46187d..1c003948d2 100644 --- a/src/mc/Process.cpp +++ b/src/mc/Process.cpp @@ -41,13 +41,9 @@ using simgrid::mc::remote; -extern "C" { - XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_process, mc, "MC process information"); -} - // ***** Helper stuff namespace simgrid { @@ -107,13 +103,17 @@ struct s_mc_memory_map_re { static char* get_lib_name(const char* pathname, struct s_mc_memory_map_re* res) { - const char* map_basename = xbt_basename((char*) pathname); + char* map_basename = xbt_basename(pathname); regmatch_t match; - if(regexec(&res->so_re, map_basename, 1, &match, 0)) + if(regexec(&res->so_re, map_basename, 1, &match, 0)) { + free(map_basename); return nullptr; + } char* libname = strndup(map_basename, match.rm_so); + free(map_basename); + map_basename = nullptr; // Strip the version suffix: if(libname && !regexec(&res->version_re, libname, 1, &match, 0)) { @@ -201,7 +201,7 @@ int open_vm(pid_t pid, int flags) // ***** Process Process::Process(pid_t pid, int sockfd) : - AddressSpace(this),pid_(pid), socket_(sockfd), running_(true) + AddressSpace(this), pid_(pid), channel_(sockfd), running_(true) {} void Process::init() @@ -233,12 +233,6 @@ void Process::init() Process::~Process() { - if (this->socket_ >= 0 && close(this->socket_) < 0) - xbt_die("Could not close communication socket"); - - this->maestro_stack_start_ = nullptr; - this->maestro_stack_end_ = nullptr; - if (this->memory_file >= 0) close(this->memory_file); @@ -246,13 +240,8 @@ Process::~Process() unw_destroy_addr_space(this->unw_underlying_addr_space); _UPT_destroy(this->unw_underlying_context); } - this->unw_underlying_context = nullptr; - this->unw_underlying_addr_space = nullptr; unw_destroy_addr_space(this->unw_addr_space); - this->unw_addr_space = nullptr; - - this->cache_flags = MC_PROCESS_CACHE_FLAG_NONE; if (this->clear_refs_fd_ >= 0) close(this->clear_refs_fd_); @@ -273,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 @@ -284,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 */ @@ -314,7 +303,7 @@ void Process::init_memory_map_info() const char* current_name = nullptr; - this->object_infos.resize(0); + this->object_infos.clear(); for (size_t i=0; i < maps.size(); i++) { simgrid::xbt::VmMap const& reg = maps[i]; @@ -684,9 +673,16 @@ void Process::ignore_local_variable(const char *var_name, const char *frame_name std::vector& Process::simix_processes() { xbt_assert(mc_mode != MC_MODE_CLIENT); - MC_process_smx_refresh(&mc_model_checker->process()); + this->refresh_simix(); return smx_process_infos; } +std::vector& Process::old_simix_processes() +{ + xbt_assert(mc_mode != MC_MODE_CLIENT); + this->refresh_simix(); + return smx_old_process_infos; +} + } }