Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
RemotePtr in get_comm_wait_raw_addr()
authoreazimi <azimi.ehsan@outlook.com>
Wed, 27 Jan 2021 16:34:03 +0000 (17:34 +0100)
committereazimi <azimi.ehsan@outlook.com>
Wed, 27 Jan 2021 17:32:30 +0000 (18:32 +0100)
src/mc/api.cpp
src/mc/api.hpp
src/mc/checker/CommunicationDeterminismChecker.cpp

index e2a50db..42fc648 100644 (file)
@@ -334,9 +334,10 @@ RemotePtr<kernel::activity::CommImpl> Api::get_comm_isend_raw_addr(smx_simcall_t
   return RemotePtr<kernel::activity::CommImpl>(static_cast<kernel::activity::CommImpl*>(comm_addr));
 }
 
-kernel::activity::CommImpl* Api::get_comm_wait_raw_addr(smx_simcall_t request) const
+RemotePtr<kernel::activity::CommImpl> Api::get_comm_wait_raw_addr(smx_simcall_t request) const
 {
-  return simcall_comm_wait__getraw__comm(request);
+  auto comm_addr = simgrid::simix::unmarshal_raw<simgrid::kernel::activity::CommImpl*>(request->args_[0]);
+  return RemotePtr<kernel::activity::CommImpl>(static_cast<kernel::activity::CommImpl*>(comm_addr));
 }
 
 kernel::activity::CommImpl* Api::get_comm_waitany_raw_addr(smx_simcall_t request, int value) const
index e6c38a0..68b80ae 100644 (file)
@@ -57,7 +57,7 @@ public:
   // COMMUNICATION APIs
   bool comm_addr_equal(const kernel::activity::CommImpl* comm_addr1, const kernel::activity::CommImpl* comm_addr2) const;
   RemotePtr<kernel::activity::CommImpl> get_comm_isend_raw_addr(smx_simcall_t request) const;
-  kernel::activity::CommImpl* get_comm_wait_raw_addr(smx_simcall_t request) const;
+  RemotePtr<kernel::activity::CommImpl> get_comm_wait_raw_addr(smx_simcall_t request) const;
   kernel::activity::CommImpl* get_comm_waitany_raw_addr(smx_simcall_t request, int value) const;
   std::string get_pattern_comm_rdv(RemotePtr<kernel::activity::CommImpl> const& addr) const;
   unsigned long get_pattern_comm_src_proc(RemotePtr<kernel::activity::CommImpl> const& addr) const;
index 73df3d8..5a588d6 100644 (file)
@@ -399,13 +399,13 @@ void CommunicationDeterminismChecker::handle_comm_pattern(simgrid::mc::CallType
       break;
     case CallType::WAIT:
     case CallType::WAITANY: {
-      simgrid::kernel::activity::CommImpl* comm_addr = nullptr;
+      RemotePtr<simgrid::kernel::activity::CommImpl> comm_addr;
       if (call_type == CallType::WAIT)
         comm_addr = api::get().get_comm_wait_raw_addr(req);
       else
-        comm_addr = api::get().get_comm_waitany_raw_addr(req, value);
+        comm_addr = remote(api::get().get_comm_waitany_raw_addr(req, value));
       auto simcall_issuer = api::get().simcall_get_issuer(req);
-      complete_comm_pattern(remote(comm_addr), simcall_issuer->get_pid(), backtracking);
+      complete_comm_pattern(comm_addr, simcall_issuer->get_pid(), backtracking);
     } break;
   default:
     xbt_die("Unexpected call type %i", (int)call_type);