#include "simgrid/sg_config.h"
#include "colls/colls.h"
+#include "src/simix/SynchroComm.hpp"
+
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_base, smpi, "Logging specific to SMPI (base)");
static int match_recv(void* a, void* b, smx_synchro_t ignored) {
xbt_dynar_t smpi_or_values = NULL;
xbt_dynar_t smpi_ois_values = NULL;
-static XBT_PRIVATE simgrid::config::Flag<double> smpi_wtime_sleep(
+static simgrid::config::Flag<double> smpi_wtime_sleep(
"smpi/wtime", "Minimum time to inject inside a call to MPI_Wtime", 0.0);
-static XBT_PRIVATE simgrid::config::Flag<double> smpi_iprobe_sleep(
+static simgrid::config::Flag<double> smpi_iprobe_sleep(
"smpi/iprobe", "Minimum time to inject inside a call to MPI_Iprobe", 1e-4);
-static XBT_PRIVATE simgrid::config::Flag<double> smpi_test_sleep(
+static simgrid::config::Flag<double> smpi_test_sleep(
"smpi/test", "Minimum time to inject inside a call to MPI_Test", 1e-4);
static int factor_cmp(const void *pa, const void *pb)
}
if (request->action){
- MPI_Request req = (MPI_Request)SIMIX_comm_get_src_data(request->action);
+ simgrid::simix::Comm *sync_comm = static_cast<simgrid::simix::Comm*>(request->action);
+ MPI_Request req = (MPI_Request)sync_comm->src_data;
*flag = 1;
if(status != MPI_STATUS_IGNORE && !(req->flags & PREPARED)) {
status->MPI_SOURCE = smpi_group_rank(smpi_comm_group(comm), req->src);
return;
}
- if ((*request)->action != NULL) { // this is not a detached send
+ if ((*request)->action != NULL)
+ // this is not a detached send
simcall_comm_wait((*request)->action, -1.0);
- if((MC_is_active() || MC_record_replay_is_active()) && (*request)->action)
- (*request)->action->comm.dst_data = NULL; // dangling pointer : dst_data is freed with a wait, need to set it to
- // NULL for system state comparison
- }
-
finish_wait(request, status);
if (*request != MPI_REQUEST_NULL && ((*request)->flags & NON_PERSISTENT))
*request = MPI_REQUEST_NULL;