A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
finish the cleanup of the netcard list container
[simgrid.git]
/
src
/
mc
/
mc_comm_pattern.cpp
diff --git
a/src/mc/mc_comm_pattern.cpp
b/src/mc/mc_comm_pattern.cpp
index
8d064c9
..
a2b49fe
100644
(file)
--- a/
src/mc/mc_comm_pattern.cpp
+++ b/
src/mc/mc_comm_pattern.cpp
@@
-13,6
+13,8
@@
#include "src/mc/mc_comm_pattern.h"
#include "src/mc/mc_smx.h"
#include "src/mc/mc_xbt.hpp"
#include "src/mc/mc_comm_pattern.h"
#include "src/mc/mc_smx.h"
#include "src/mc/mc_xbt.hpp"
+#include "src/mc/Checker.hpp"
+#include "src/mc/CommunicationDeterminismChecker.hpp"
using simgrid::mc::remote;
using simgrid::mc::remote;
@@
-71,25
+73,32
@@
void MC_handle_comm_pattern(
e_mc_call_type_t call_type, smx_simcall_t req,
int value, xbt_dynar_t pattern, int backtracking)
{
e_mc_call_type_t call_type, smx_simcall_t req,
int value, xbt_dynar_t pattern, int backtracking)
{
+ // HACK, do not rely on the Checker implementation outside of it
+ simgrid::mc::CommunicationDeterminismChecker* checker =
+ (simgrid::mc::CommunicationDeterminismChecker*) mc_model_checker->getChecker();
switch(call_type) {
case MC_CALL_TYPE_NONE:
break;
case MC_CALL_TYPE_SEND:
case MC_CALL_TYPE_RECV:
switch(call_type) {
case MC_CALL_TYPE_NONE:
break;
case MC_CALL_TYPE_SEND:
case MC_CALL_TYPE_RECV:
-
MC_
get_comm_pattern(pattern, req, call_type, backtracking);
+
checker->
get_comm_pattern(pattern, req, call_type, backtracking);
break;
case MC_CALL_TYPE_WAIT:
case MC_CALL_TYPE_WAITANY:
{
break;
case MC_CALL_TYPE_WAIT:
case MC_CALL_TYPE_WAITANY:
{
- s
mx_synchro_t
comm_addr = nullptr;
+ s
imgrid::mc::RemotePtr<simgrid::kernel::activity::Comm>
comm_addr = nullptr;
if (call_type == MC_CALL_TYPE_WAIT)
if (call_type == MC_CALL_TYPE_WAIT)
- comm_addr = simcall_comm_wait__get__comm(req);
- else
+ comm_addr = remote(static_cast<simgrid::kernel::activity::Comm*>(
+ simcall_comm_wait__get__comm(req)));
+ else {
+ simgrid::kernel::activity::Comm* addr;
// comm_addr = REMOTE(xbt_dynar_get_as(simcall_comm_waitany__get__comms(req), value, smx_synchro_t)):
// comm_addr = REMOTE(xbt_dynar_get_as(simcall_comm_waitany__get__comms(req), value, smx_synchro_t)):
- simgrid::mc::read_element(mc_model_checker->process(), &
comm_
addr,
+ simgrid::mc::read_element(mc_model_checker->process(), &addr,
remote(simcall_comm_waitany__get__comms(req)), value, sizeof(comm_addr));
remote(simcall_comm_waitany__get__comms(req)), value, sizeof(comm_addr));
- MC_complete_comm_pattern(pattern, comm_addr,
+ comm_addr = remote(addr);
+ }
+ checker->complete_comm_pattern(pattern, comm_addr,
MC_smx_simcall_get_issuer(req)->pid, backtracking);
}
break;
MC_smx_simcall_get_issuer(req)->pid, backtracking);
}
break;