From 1af181ed979a4dfa517e4a5f37d7a987ee0ec337 Mon Sep 17 00:00:00 2001 From: Gabriel Corona Date: Tue, 5 Apr 2016 16:25:32 +0200 Subject: [PATCH] [mc] Use std::string for request_get_dot_output() and s_mc_global_t::prev_req --- src/mc/CommunicationDeterminismChecker.cpp | 10 ++- src/mc/LivenessChecker.cpp | 12 ++-- src/mc/SafetyChecker.cpp | 12 ++-- src/mc/mc_request.cpp | 78 ++++++++++------------ src/mc/mc_request.h | 2 +- src/mc/mc_snapshot.h | 2 +- 6 files changed, 54 insertions(+), 62 deletions(-) diff --git a/src/mc/CommunicationDeterminismChecker.cpp b/src/mc/CommunicationDeterminismChecker.cpp index 15f19f05f8..da1b86e001 100644 --- a/src/mc/CommunicationDeterminismChecker.cpp +++ b/src/mc/CommunicationDeterminismChecker.cpp @@ -409,7 +409,7 @@ int CommunicationDeterminismChecker::main(void) simgrid::mc::request_to_string( req, value, simgrid::mc::RequestType::simix).c_str()); - char* req_str = nullptr; + std::string req_str; if (dot_output != nullptr) req_str = simgrid::mc::request_get_dot_output(req, value); @@ -452,17 +452,15 @@ int CommunicationDeterminismChecker::main(void) MC_state_interleave_process(next_state.get(), &p.copy); if (dot_output != nullptr) - fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n", state->num, next_state->num, req_str); + fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n", + state->num, next_state->num, req_str.c_str()); } else if (dot_output != nullptr) fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n", - state->num, visited_state->other_num == -1 ? visited_state->num : visited_state->other_num, req_str); + state->num, visited_state->other_num == -1 ? visited_state->num : visited_state->other_num, req_str.c_str()); stack_.push_back(std::move(next_state)); - if (dot_output != nullptr) - xbt_free(req_str); - } else { if (stack_.size() > (std::size_t) _sg_mc_max_depth) diff --git a/src/mc/LivenessChecker.cpp b/src/mc/LivenessChecker.cpp index 5ded308d47..567548fbba 100644 --- a/src/mc/LivenessChecker.cpp +++ b/src/mc/LivenessChecker.cpp @@ -138,7 +138,7 @@ std::shared_ptr LivenessChecker::insertAcceptancePair(simgrid::mc:: if (dot_output != nullptr) fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n", initial_global_state->prev_pair, pair_test->num, - initial_global_state->prev_req); + initial_global_state->prev_req.c_str()); return nullptr; } @@ -366,7 +366,9 @@ int LivenessChecker::main(void) && (visited_num = this->insertVisitedPair( reached_pair, current_pair.get())) != -1) { if (dot_output != nullptr){ - fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n", initial_global_state->prev_pair, visited_num, initial_global_state->prev_req); + fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n", + initial_global_state->prev_pair, visited_num, + initial_global_state->prev_req.c_str()); fflush(dot_output); } XBT_DEBUG("Pair already visited (equal to pair %d), exploration on the current path stopped.", visited_num); @@ -380,8 +382,10 @@ int LivenessChecker::main(void) if (dot_output != nullptr) { if (initial_global_state->prev_pair != 0 && initial_global_state->prev_pair != current_pair->num) { - fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n", initial_global_state->prev_pair, current_pair->num, initial_global_state->prev_req); - xbt_free(initial_global_state->prev_req); + fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n", + initial_global_state->prev_pair, current_pair->num, + initial_global_state->prev_req.c_str()); + initial_global_state->prev_req.clear(); } initial_global_state->prev_pair = current_pair->num; initial_global_state->prev_req = simgrid::mc::request_get_dot_output(req, value); diff --git a/src/mc/SafetyChecker.cpp b/src/mc/SafetyChecker.cpp index 4b8c59f900..bcb9065052 100644 --- a/src/mc/SafetyChecker.cpp +++ b/src/mc/SafetyChecker.cpp @@ -126,7 +126,7 @@ int SafetyChecker::run() simgrid::mc::request_to_string( req, value, simgrid::mc::RequestType::simix).c_str()); - char* req_str = nullptr; + std::string req_str; if (dot_output != nullptr) req_str = simgrid::mc::request_get_dot_output(req, value); @@ -161,15 +161,15 @@ int SafetyChecker::run() } if (dot_output != nullptr) - std::fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n", state->num, next_state->num, req_str); + std::fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n", + state->num, next_state->num, req_str.c_str()); } else if (dot_output != nullptr) - std::fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n", state->num, visitedState_->other_num == -1 ? visitedState_->num : visitedState_->other_num, req_str); + std::fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n", + state->num, + visitedState_->other_num == -1 ? visitedState_->num : visitedState_->other_num, req_str.c_str()); stack_.push_back(std::move(next_state)); - - if (dot_output != nullptr) - xbt_free(req_str); } XBT_INFO("No property violation found."); diff --git a/src/mc/mc_request.cpp b/src/mc/mc_request.cpp index 556e3358aa..121ce9101a 100644 --- a/src/mc/mc_request.cpp +++ b/src/mc/mc_request.cpp @@ -481,17 +481,16 @@ static inline const char* get_color(int id) return colors[id % (sizeof(colors) / sizeof(colors[0])) ]; } -char *request_get_dot_output(smx_simcall_t req, int value) +std::string request_get_dot_output(smx_simcall_t req, int value) { - char *label = nullptr; + std::string label; const smx_process_t issuer = MC_smx_simcall_get_issuer(req); switch (req->call) { case SIMCALL_COMM_ISEND: if (issuer->host) - label = - bprintf("[(%lu)%s] iSend", issuer->pid, + label = simgrid::xbt::string_printf("[(%lu)%s] iSend", issuer->pid, MC_smx_process_get_host_name(issuer)); else label = bprintf("[(%lu)] iSend", issuer->pid); @@ -499,21 +498,19 @@ char *request_get_dot_output(smx_simcall_t req, int value) case SIMCALL_COMM_IRECV: if (issuer->host) - label = - bprintf("[(%lu)%s] iRecv", issuer->pid, + label = simgrid::xbt::string_printf("[(%lu)%s] iRecv", issuer->pid, MC_smx_process_get_host_name(issuer)); else - label = bprintf("[(%lu)] iRecv", issuer->pid); + label = simgrid::xbt::string_printf("[(%lu)] iRecv", issuer->pid); break; case SIMCALL_COMM_WAIT: { if (value == -1) { if (issuer->host) - label = - bprintf("[(%lu)%s] WaitTimeout", issuer->pid, + label = simgrid::xbt::string_printf("[(%lu)%s] WaitTimeout", issuer->pid, MC_smx_process_get_host_name(issuer)); else - label = bprintf("[(%lu)] WaitTimeout", issuer->pid); + label = simgrid::xbt::string_printf("[(%lu)] WaitTimeout", issuer->pid); } else { smx_synchro_t remote_act = simcall_comm_wait__get__comm(req); s_smx_synchro_t synchro; @@ -523,14 +520,14 @@ char *request_get_dot_output(smx_simcall_t req, int value) smx_process_t src_proc = MC_smx_resolve_process(synchro.comm.src_proc); smx_process_t dst_proc = MC_smx_resolve_process(synchro.comm.dst_proc); if (issuer->host) - label = - bprintf("[(%lu)%s] Wait [(%lu)->(%lu)]", issuer->pid, + label = simgrid::xbt::string_printf("[(%lu)%s] Wait [(%lu)->(%lu)]", + issuer->pid, MC_smx_process_get_host_name(issuer), src_proc ? src_proc->pid : 0, dst_proc ? dst_proc->pid : 0); else - label = - bprintf("[(%lu)] Wait [(%lu)->(%lu)]", issuer->pid, + label = simgrid::xbt::string_printf("[(%lu)] Wait [(%lu)->(%lu)]", + issuer->pid, src_proc ? src_proc->pid : 0, dst_proc ? dst_proc->pid : 0); } @@ -544,18 +541,17 @@ char *request_get_dot_output(smx_simcall_t req, int value) sizeof(synchro), remote(remote_act)); if (synchro.comm.src_proc == nullptr || synchro.comm.dst_proc == NULL) { if (issuer->host) - label = - bprintf("[(%lu)%s] Test FALSE", issuer->pid, + label = simgrid::xbt::string_printf("[(%lu)%s] Test FALSE", + issuer->pid, MC_smx_process_get_host_name(issuer)); else label = bprintf("[(%lu)] Test FALSE", issuer->pid); } else { if (issuer->host) - label = - bprintf("[(%lu)%s] Test TRUE", issuer->pid, + label = simgrid::xbt::string_printf("[(%lu)%s] Test TRUE", issuer->pid, MC_smx_process_get_host_name(issuer)); else - label = bprintf("[(%lu)] Test TRUE", issuer->pid); + label = simgrid::xbt::string_printf("[(%lu)] Test TRUE", issuer->pid); } break; } @@ -564,54 +560,51 @@ char *request_get_dot_output(smx_simcall_t req, int value) unsigned long comms_size = read_length( mc_model_checker->process(), remote(simcall_comm_waitany__get__comms(req))); if (issuer->host) - label = - bprintf("[(%lu)%s] WaitAny [%d of %lu]", issuer->pid, + label = simgrid::xbt::string_printf("[(%lu)%s] WaitAny [%d of %lu]", + issuer->pid, MC_smx_process_get_host_name(issuer), value + 1, comms_size); else - label = - bprintf("[(%lu)] WaitAny [%d of %lu]", issuer->pid, value + 1, - comms_size); + label = simgrid::xbt::string_printf("[(%lu)] WaitAny [%d of %lu]", + issuer->pid, value + 1, comms_size); break; } case SIMCALL_COMM_TESTANY: if (value == -1) { if (issuer->host) - label = - bprintf("[(%lu)%s] TestAny FALSE", issuer->pid, - MC_smx_process_get_host_name(issuer)); + label = simgrid::xbt::string_printf("[(%lu)%s] TestAny FALSE", + issuer->pid, MC_smx_process_get_host_name(issuer)); else - label = bprintf("[(%lu)] TestAny FALSE", issuer->pid); + label = simgrid::xbt::string_printf("[(%lu)] TestAny FALSE", issuer->pid); } else { if (issuer->host) - label = - bprintf("[(%lu)%s] TestAny TRUE [%d of %lu]", issuer->pid, + label = simgrid::xbt::string_printf("[(%lu)%s] TestAny TRUE [%d of %lu]", + issuer->pid, MC_smx_process_get_host_name(issuer), value + 1, xbt_dynar_length(simcall_comm_testany__get__comms(req))); else - label = - bprintf("[(%lu)] TestAny TRUE [%d of %lu]", issuer->pid, + label = simgrid::xbt::string_printf("[(%lu)] TestAny TRUE [%d of %lu]", + issuer->pid, value + 1, xbt_dynar_length(simcall_comm_testany__get__comms(req))); } break; case SIMCALL_MUTEX_TRYLOCK: - label = bprintf("[(%lu)] Mutex TRYLOCK", issuer->pid); + label = simgrid::xbt::string_printf("[(%lu)] Mutex TRYLOCK", issuer->pid); break; case SIMCALL_MUTEX_LOCK: - label = bprintf("[(%lu)] Mutex LOCK", issuer->pid); + label = simgrid::xbt::string_printf("[(%lu)] Mutex LOCK", issuer->pid); break; case SIMCALL_MC_RANDOM: if (issuer->host) - label = - bprintf("[(%lu)%s] MC_RANDOM (%d)", issuer->pid, - MC_smx_process_get_host_name(issuer), value); + label = simgrid::xbt::string_printf("[(%lu)%s] MC_RANDOM (%d)", + issuer->pid, MC_smx_process_get_host_name(issuer), value); else - label = bprintf("[(%lu)] MC_RANDOM (%d)", issuer->pid, value); + label = simgrid::xbt::string_printf("[(%lu)] MC_RANDOM (%d)", issuer->pid, value); break; default: @@ -619,12 +612,9 @@ char *request_get_dot_output(smx_simcall_t req, int value) } const char* color = get_color(issuer->pid - 1); - char* str = - bprintf("label = \"%s\", color = %s, fontcolor = %s", label, - color, color); - xbt_free(label); - return str; - + return simgrid::xbt::string_printf( + "label = \"%s\", color = %s, fontcolor = %s", label.c_str(), + color, color); } } diff --git a/src/mc/mc_request.h b/src/mc/mc_request.h index 97c153ac79..c03e2a35fd 100644 --- a/src/mc/mc_request.h +++ b/src/mc/mc_request.h @@ -34,7 +34,7 @@ XBT_PRIVATE bool request_is_enabled_by_idx(smx_simcall_t req, unsigned int idx); */ XBT_PRIVATE bool process_is_enabled(smx_process_t process); -XBT_PRIVATE char *request_get_dot_output(smx_simcall_t req, int value); +XBT_PRIVATE std::string request_get_dot_output(smx_simcall_t req, int value); } } diff --git a/src/mc/mc_snapshot.h b/src/mc/mc_snapshot.h index a7b4b0051b..81dc444172 100644 --- a/src/mc/mc_snapshot.h +++ b/src/mc/mc_snapshot.h @@ -131,7 +131,7 @@ typedef struct XBT_PRIVATE s_mc_snapshot_stack { typedef struct s_mc_global_t { std::shared_ptr snapshot; int prev_pair = 0; - char *prev_req = nullptr; + std::string prev_req; int initial_communications_pattern_done = 0; int recv_deterministic = 0; int send_deterministic = 0; -- 2.20.1