From: Gabriel Corona Date: Tue, 6 Oct 2015 09:51:26 +0000 (+0200) Subject: [mc] Remove Process.is_self() X-Git-Tag: v3_12~10^2~9 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/f6981f90a3edb416f81749556217e0cce13f4459?hp=113b02e6368a5f13ae3db49b9265246a138a852e [mc] Remove Process.is_self() This was needed for single-process mode. --- diff --git a/src/mc/Process.cpp b/src/mc/Process.cpp index 67a18b3b95..fbf411dd7c 100644 --- a/src/mc/Process.cpp +++ b/src/mc/Process.cpp @@ -209,12 +209,8 @@ namespace mc { Process::Process(pid_t pid, int sockfd) { Process* process = this; - - process->process_flags = MC_PROCESS_NO_FLAG; process->socket_ = sockfd; process->pid_ = pid; - if (pid==getpid()) - process->process_flags |= MC_PROCESS_SELF_FLAG; process->running_ = true; process->status_ = 0; process->memory_map_ = get_memory_map(pid); @@ -225,15 +221,10 @@ Process::Process(pid_t pid, int sockfd) process->clear_refs_fd_ = -1; process->pagemap_fd_ = -1; - // Open the memory file - if (process->is_self()) - process->memory_file = -1; - else { - int fd = open_vm(process->pid_, O_RDWR); - if (fd<0) - xbt_die("Could not open file for process virtual address space"); - process->memory_file = fd; - } + int fd = open_vm(process->pid_, O_RDWR); + if (fd<0) + xbt_die("Could not open file for process virtual address space"); + process->memory_file = fd; // Read std_heap (is a struct mdesc*): simgrid::mc::Variable* std_heap_var = process->find_variable("__mmalloc_default_mdp"); @@ -247,15 +238,9 @@ Process::Process(pid_t pid, int sockfd) process->smx_process_infos = MC_smx_process_info_list_new(); process->smx_old_process_infos = MC_smx_process_info_list_new(); - process->unw_addr_space = unw_create_addr_space(&mc_unw_accessors , __BYTE_ORDER); - if (process->process_flags & MC_PROCESS_SELF_FLAG) { - process->unw_underlying_addr_space = unw_local_addr_space; - process->unw_underlying_context = NULL; - } else { - process->unw_underlying_addr_space = unw_create_addr_space(&mc_unw_vmread_accessors, __BYTE_ORDER); - process->unw_underlying_context = _UPT_create(pid); - } + process->unw_underlying_addr_space = unw_create_addr_space(&mc_unw_vmread_accessors, __BYTE_ORDER); + process->unw_underlying_context = _UPT_create(pid); } Process::~Process() @@ -265,7 +250,6 @@ Process::~Process() if (this->socket_ >= 0 && close(this->socket_) < 0) xbt_die("Could not close communication socket"); - process->process_flags = MC_PROCESS_NO_FLAG; process->pid_ = 0; process->maestro_stack_start_ = nullptr; @@ -310,7 +294,6 @@ Process::~Process() void Process::refresh_heap() { xbt_assert(mc_mode == MC_MODE_SERVER); - xbt_assert(!this->is_self()); // Read/dereference/refresh the std_heap pointer: if (!this->heap) { this->heap = (struct mdesc*) malloc(sizeof(struct mdesc)); @@ -328,7 +311,6 @@ void Process::refresh_heap() void Process::refresh_malloc_info() { xbt_assert(mc_mode == MC_MODE_SERVER); - xbt_assert(!this->is_self()); if (!(this->cache_flags & MC_PROCESS_CACHE_FLAG_HEAP)) this->refresh_heap(); // Refresh process->heapinfo: @@ -503,8 +485,6 @@ char* Process::read_string(remote_ptr address) const { if (!address) return NULL; - if (this->is_self()) - return xbt_strdup((char*) address.address()); off_t len = 128; char* res = (char*) malloc(len); @@ -564,18 +544,9 @@ const void *Process::read_bytes(void* buffer, std::size_t size, #endif } - if (this->is_self()) { - if (mode == simgrid::mc::AddressSpace::Lazy) - return (void*)address.address(); - else { - memcpy(buffer, (void*)address.address(), size); - return buffer; - } - } else { - if (pread_whole(this->memory_file, buffer, size, address.address()) < 0) - xbt_die("Read from process %lli failed", (long long) this->pid_); - return buffer; - } + if (pread_whole(this->memory_file, buffer, size, address.address()) < 0) + xbt_die("Read from process %lli failed", (long long) this->pid_); + return buffer; } /** Write data to a process memory @@ -587,26 +558,18 @@ const void *Process::read_bytes(void* buffer, std::size_t size, */ void Process::write_bytes(const void* buffer, size_t len, remote_ptr address) { - if (this->is_self()) { - memcpy((void*)address.address(), buffer, len); - } else { - if (pwrite_whole(this->memory_file, buffer, len, address.address()) < 0) - xbt_die("Write to process %lli failed", (long long) this->pid_); - } + if (pwrite_whole(this->memory_file, buffer, len, address.address()) < 0) + xbt_die("Write to process %lli failed", (long long) this->pid_); } void Process::clear_bytes(remote_ptr address, size_t len) { - if (this->is_self()) { - memset((void*)address.address(), 0, len); - } else { - pthread_once(&zero_buffer_flag, MC_zero_buffer_init); - while (len) { - size_t s = len > zero_buffer_size ? zero_buffer_size : len; - this->write_bytes(zero_buffer, s, address); - address = remote((char*) address.address() + s); - len -= s; - } + pthread_once(&zero_buffer_flag, MC_zero_buffer_init); + while (len) { + size_t s = len > zero_buffer_size ? zero_buffer_size : len; + this->write_bytes(zero_buffer, s, address); + address = remote((char*) address.address() + s); + len -= s; } } diff --git a/src/mc/Process.hpp b/src/mc/Process.hpp index e3a11ccb8b..71e63e29a5 100644 --- a/src/mc/Process.hpp +++ b/src/mc/Process.hpp @@ -35,10 +35,6 @@ #include "AddressSpace.hpp" #include "mc_protocol.h" -typedef int mc_process_flags_t; -#define MC_PROCESS_NO_FLAG 0 -#define MC_PROCESS_SELF_FLAG 1 - // 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; @@ -62,12 +58,6 @@ public: Process(pid_t pid, int sockfd); ~Process(); - - bool is_self() const - { - return this->process_flags & MC_PROCESS_SELF_FLAG; - } - // Read memory: const void* read_bytes(void* buffer, std::size_t size, remote_ptr address, int process_index = ProcessIndexAny, @@ -164,7 +154,6 @@ private: void refresh_heap(); void refresh_malloc_info(); private: - mc_process_flags_t process_flags; pid_t pid_; int socket_; int status_; diff --git a/src/mc/mc_smx.cpp b/src/mc/mc_smx.cpp index 7b760772c2..7ef07f57fe 100644 --- a/src/mc/mc_smx.cpp +++ b/src/mc/mc_smx.cpp @@ -87,7 +87,6 @@ static void MC_process_refresh_simix_process_list( void MC_process_smx_refresh(simgrid::mc::Process* process) { xbt_assert(mc_mode == MC_MODE_SERVER); - xbt_assert(!process->is_self()); if (process->cache_flags & MC_PROCESS_CACHE_FLAG_SIMIX_PROCESSES) return; diff --git a/src/mc/mc_unw.cpp b/src/mc/mc_unw.cpp index 4fc030fb07..c53785000c 100644 --- a/src/mc/mc_unw.cpp +++ b/src/mc/mc_unw.cpp @@ -224,12 +224,6 @@ int mc_unw_init_cursor(unw_cursor_t *cursor, mc_unw_context_t context) { if (!context->process || !context->address_space) return -UNW_EUNSPEC; - simgrid::mc::AddressSpace* as = context->address_space; - - simgrid::mc::Process* process = dynamic_cast(as); - if (process && process->is_self()) - return unw_init_local(cursor, &context->context); - return unw_init_remote(cursor, context->process->unw_addr_space, context); } diff --git a/src/mc/mc_visited.cpp b/src/mc/mc_visited.cpp index 6498965f1c..15dd471540 100644 --- a/src/mc/mc_visited.cpp +++ b/src/mc/mc_visited.cpp @@ -60,13 +60,9 @@ static mc_visited_state_t visited_state_new() process->get_heap()->heaplimit, process->get_malloc_info()); - if (mc_model_checker->process().is_self()) { - new_state->nb_processes = xbt_swag_size(simix_global->process_list); - } else { - MC_process_smx_refresh(&mc_model_checker->process()); - new_state->nb_processes = xbt_dynar_length( - mc_model_checker->process().smx_process_infos); - } + MC_process_smx_refresh(&mc_model_checker->process()); + new_state->nb_processes = xbt_dynar_length( + mc_model_checker->process().smx_process_infos); new_state->system_state = MC_take_snapshot(mc_stats->expanded_states); new_state->num = mc_stats->expanded_states; @@ -85,13 +81,11 @@ mc_visited_pair_t MC_visited_pair_new(int pair_num, xbt_automaton_state_t automa pair->heap_bytes_used = mmalloc_get_bytes_used_remote( process->get_heap()->heaplimit, process->get_malloc_info()); - if (mc_model_checker->process().is_self()) { - pair->nb_processes = xbt_swag_size(simix_global->process_list); - } else { - MC_process_smx_refresh(&mc_model_checker->process()); - pair->nb_processes = xbt_dynar_length( - mc_model_checker->process().smx_process_infos); - } + + MC_process_smx_refresh(&mc_model_checker->process()); + pair->nb_processes = xbt_dynar_length( + mc_model_checker->process().smx_process_infos); + pair->automaton_state = automaton_state; pair->num = pair_num; pair->other_num = -1;