Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' of framagit.org:simgrid/simgrid
authorMartin Quinson <martin.quinson@ens-rennes.fr>
Mon, 8 Mar 2021 21:38:29 +0000 (22:38 +0100)
committerMartin Quinson <martin.quinson@ens-rennes.fr>
Mon, 8 Mar 2021 21:38:29 +0000 (22:38 +0100)
1  2 
src/mc/api.cpp
src/mc/checker/CommunicationDeterminismChecker.cpp
src/mc/checker/SafetyChecker.cpp

diff --cc src/mc/api.cpp
Simple merge
@@@ -185,18 -186,17 +185,18 @@@ void SafetyChecker::backtrack(
      std::unique_ptr<State> state = std::move(stack_.back());
      stack_.pop_back();
      if (reductionMode_ == ReductionMode::dpor) {
 -      smx_simcall_t req = &state->internal_req_;
 -      // FIXME: need something less ugly than this substring search
 -      if (req->call_ == simix::Simcall::MUTEX_LOCK ||
 -          (req->observer_ &&
 -           api::get().request_to_string(req, 0, RequestType::internal).find("Mutex") != std::string::npos))
 +      auto call = state->executed_req_.call_;
 +      const kernel::actor::ActorImpl* issuer = api::get().simcall_get_issuer(&state->executed_req_);
-       if (call == simix::Simcall::MUTEX_LOCK || call == simix::Simcall::MUTEX_TRYLOCK)
++      if (call == simix::Simcall::MUTEX_LOCK)
          xbt_die("Mutex is currently not supported with DPOR,  use --cfg=model-check/reduction:none");
  
 -      const kernel::actor::ActorImpl* issuer = api::get().simcall_get_issuer(req);
        for (auto i = stack_.rbegin(); i != stack_.rend(); ++i) {
          State* prev_state = i->get();
 -        if (api::get().simcall_check_dependency(req, &prev_state->internal_req_)) {
 +        if (state->executed_req_.issuer_ == prev_state->executed_req_.issuer_) {
 +          XBT_DEBUG("Simcall %s and %s with same issuer", SIMIX_simcall_name(call),
 +                    SIMIX_simcall_name(prev_state->executed_req_.call_));
 +          break;
 +        } else if (api::get().simcall_check_dependency(&state->internal_req_, &prev_state->internal_req_)) {
            if (XBT_LOG_ISENABLED(mc_safety, xbt_log_priority_debug)) {
              XBT_DEBUG("Dependent Transitions:");
              int value              = prev_state->transition_.times_considered_;