From b3a2d242762db3186181c3b131584f6db9690307 Mon Sep 17 00:00:00 2001 From: Gabriel Corona Date: Tue, 5 Apr 2016 13:45:37 +0200 Subject: [PATCH] [mc] Use RAII std::vector for s_mc_comm_pattern::data --- src/mc/CommunicationDeterminismChecker.cpp | 25 +++++++--------------- src/mc/mc_comm_pattern.cpp | 17 +++------------ src/mc/mc_comm_pattern.h | 8 ++----- 3 files changed, 13 insertions(+), 37 deletions(-) diff --git a/src/mc/CommunicationDeterminismChecker.cpp b/src/mc/CommunicationDeterminismChecker.cpp index f2fb17e1f5..4c51b1b2a6 100644 --- a/src/mc/CommunicationDeterminismChecker.cpp +++ b/src/mc/CommunicationDeterminismChecker.cpp @@ -46,15 +46,9 @@ static e_mc_comm_pattern_difference_t compare_comm_pattern(mc_comm_pattern_t com return DST_PROC_DIFF; if (comm1->tag != comm2->tag) return TAG_DIFF; - if (comm1->data_size != comm2->data_size) + if (comm1->data.size() != comm2->data.size()) return DATA_SIZE_DIFF; - if(comm1->data == nullptr && comm2->data == NULL) - return NONE_DIFF; - if(comm1->data != nullptr && comm2->data !=NULL) { - if (!memcmp(comm1->data, comm2->data, comm1->data_size)) - return NONE_DIFF; - return DATA_DIFF; - } else + if (comm1->data != comm2->data) return DATA_DIFF; return NONE_DIFF; } @@ -108,14 +102,13 @@ static void update_comm_pattern(mc_comm_pattern_t comm_pattern, smx_synchro_t co comm_pattern->dst_proc = dst_proc->pid; comm_pattern->src_host = MC_smx_process_get_host_name(src_proc); comm_pattern->dst_host = MC_smx_process_get_host_name(dst_proc); - if (comm_pattern->data_size == -1 && comm.comm.src_buff != nullptr) { + if (comm_pattern->data.size() == 0 && comm.comm.src_buff != nullptr) { size_t buff_size; mc_model_checker->process().read( &buff_size, remote(comm.comm.dst_buff_size)); - comm_pattern->data_size = buff_size; - comm_pattern->data = xbt_malloc0(comm_pattern->data_size); + comm_pattern->data.resize(buff_size); mc_model_checker->process().read_bytes( - comm_pattern->data, comm_pattern->data_size, + comm_pattern->data.data(), comm_pattern->data.size(), remote(comm.comm.src_buff)); } } @@ -185,8 +178,6 @@ void MC_get_comm_pattern(xbt_dynar_t list, smx_simcall_t request, e_mc_call_type incomplete_communications_pattern, issuer->pid, xbt_dynar_t); mc_comm_pattern_t pattern = new s_mc_comm_pattern_t(); - pattern->data_size = -1; - pattern->data = nullptr; pattern->index = initial_pattern->index_comm + xbt_dynar_length(incomplete_pattern); @@ -210,10 +201,10 @@ void MC_get_comm_pattern(xbt_dynar_t list, smx_simcall_t request, e_mc_call_type pattern->tag = mpi_request.tag; if(synchro.comm.src_buff != nullptr){ - pattern->data_size = synchro.comm.src_buff_size; - pattern->data = xbt_malloc0(pattern->data_size); + pattern->data.resize(synchro.comm.src_buff_size); mc_model_checker->process().read_bytes( - pattern->data, pattern->data_size, remote(synchro.comm.src_buff)); + pattern->data.data(), pattern->data.size(), + remote(synchro.comm.src_buff)); } if(mpi_request.detached){ if (!simgrid::mc::initial_global_state->initial_communications_pattern_done) { diff --git a/src/mc/mc_comm_pattern.cpp b/src/mc/mc_comm_pattern.cpp index e8536f0a2b..515a38007e 100644 --- a/src/mc/mc_comm_pattern.cpp +++ b/src/mc/mc_comm_pattern.cpp @@ -27,20 +27,9 @@ mc_comm_pattern_t MC_comm_pattern_dup(mc_comm_pattern_t comm) res->type = comm->type; res->comm_addr = comm->comm_addr; res->rdv = comm->rdv; - res->data_size = -1; - res->data = nullptr; - if (comm->type == SIMIX_COMM_SEND) { - res->src_proc = comm->src_proc; - res->src_host = comm->src_host; - if (comm->data != nullptr) { - res->data_size = comm->data_size; - res->data = xbt_malloc0(comm->data_size); - memcpy(res->data, comm->data, comm->data_size); - } - } else { - res->dst_proc = comm->dst_proc; - res->dst_host = comm->dst_host; - } + res->data = comm->data; + res->dst_proc = comm->dst_proc; + res->dst_host = comm->dst_host; return res; } diff --git a/src/mc/mc_comm_pattern.h b/src/mc/mc_comm_pattern.h index 1fd9774e30..fb3de15edf 100644 --- a/src/mc/mc_comm_pattern.h +++ b/src/mc/mc_comm_pattern.h @@ -11,6 +11,7 @@ #include #include +#include #include #include @@ -32,8 +33,7 @@ typedef struct s_mc_comm_pattern{ const char *src_host = nullptr; const char *dst_host = nullptr; std::string rdv; - ssize_t data_size = 0; - void *data = nullptr; + std::vector data; int tag = 0; int index = 0; @@ -41,10 +41,6 @@ typedef struct s_mc_comm_pattern{ { std::memset(&comm_addr, 0, sizeof(comm_addr)); } - ~s_mc_comm_pattern() - { - xbt_free(this->data); - } // No copy: s_mc_comm_pattern(s_mc_comm_pattern const&) = delete; -- 2.20.1