Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Make msg_comm_t be a real structure again, not an alias of smx_comm_t.
[simgrid.git] / src / simix / smx_network.c
index 5a1d603..d1c83d3 100644 (file)
@@ -19,8 +19,6 @@ static void SIMIX_comm_finish(smx_action_t action);
 static void SIMIX_waitany_req_remove_from_actions(smx_req_t req);
 static void SIMIX_comm_copy_data(smx_action_t comm);
 static smx_action_t SIMIX_comm_new(e_smx_comm_type_t type);
-static XBT_INLINE void SIMIX_comm_wait_for_completion(smx_action_t comm,
-                                                      double timeout);
 static XBT_INLINE void SIMIX_rdv_push(smx_rdv_t rdv, smx_action_t comm);
 static XBT_INLINE void SIMIX_rdv_remove(smx_rdv_t rdv, smx_action_t comm);
 static smx_action_t SIMIX_rdv_get_request(smx_rdv_t rdv, e_smx_comm_type_t type,
@@ -362,8 +360,20 @@ void SIMIX_pre_comm_wait(smx_req_t req, int idx)
 void SIMIX_pre_comm_test(smx_req_t req)
 {
   smx_action_t action = req->comm_test.comm;
-  req->comm_test.result = (action->state != SIMIX_WAITING && action->state != SIMIX_RUNNING);
 
+  if(MC_IS_ENABLED){
+    req->comm_test.result = action->comm.src_proc && action->comm.dst_proc;
+    if(req->comm_test.result){
+      action->state = SIMIX_DONE;
+      xbt_fifo_push(action->request_list, req);
+      SIMIX_comm_finish(action);
+    }else{
+      SIMIX_request_answer(req);
+    }
+    return;
+  }
+
+  req->comm_test.result = (action->state != SIMIX_WAITING && action->state != SIMIX_RUNNING);
   if (req->comm_test.result) {
     xbt_fifo_push(action->request_list, req);
     SIMIX_comm_finish(action);
@@ -384,6 +394,7 @@ void SIMIX_pre_comm_testany(smx_req_t req, int idx)
       SIMIX_request_answer(req);
     }else{
       action = xbt_dynar_get_as(actions, idx, smx_action_t);
+      req->comm_testany.result = idx;
       xbt_fifo_push(action->request_list, req);
       action->state = SIMIX_DONE;
       SIMIX_comm_finish(action);