X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/539916de848562683cf2e5425d5160c2a43f135a..9532edf044eed31bcf6de22916c8824e18f373ad:/src/simix/smx_network.c diff --git a/src/simix/smx_network.c b/src/simix/smx_network.c index 089c68e151..942deb5779 100644 --- a/src/simix/smx_network.c +++ b/src/simix/smx_network.c @@ -258,9 +258,7 @@ smx_synchro_t SIMIX_comm_new(e_smx_comm_type_t type) synchro->latency_limited = -1; #endif -#ifdef HAVE_TRACING synchro->category = NULL; -#endif XBT_DEBUG("Create communicate synchro %p", synchro); ++smx_total_comms; @@ -423,7 +421,7 @@ smx_synchro_t SIMIX_comm_isend(smx_process_t src_proc, smx_rdv_t rdv, other_synchro->comm.copy_data_fun = copy_data_fun; - if (MC_is_active()) { + if (MC_is_active() || MC_record_replay_is_active()) { other_synchro->state = SIMIX_RUNNING; return (detached ? NULL : other_synchro); } @@ -532,7 +530,7 @@ smx_synchro_t SIMIX_comm_irecv(smx_process_t dst_proc, smx_rdv_t rdv, SIMIX_comm_copy_data(other_synchro);*/ - if (MC_is_active()) { + if (MC_is_active() || MC_record_replay_is_active()) { other_synchro->state = SIMIX_RUNNING; return other_synchro; } @@ -593,7 +591,7 @@ void simcall_HANDLER_comm_wait(smx_simcall_t simcall, smx_synchro_t synchro, dou xbt_fifo_push(synchro->simcalls, simcall); simcall->issuer->waiting_synchro = synchro; - if (MC_is_active()) { + if (MC_is_active() || MC_record_replay_is_active()) { int idx = SIMCALL_GET_MC_VALUE(simcall); if (idx == 0) { synchro->state = SIMIX_DONE; @@ -630,7 +628,7 @@ void simcall_HANDLER_comm_wait(smx_simcall_t simcall, smx_synchro_t synchro, dou void simcall_HANDLER_comm_test(smx_simcall_t simcall, smx_synchro_t synchro) { - if(MC_is_active()){ + if(MC_is_active() || MC_record_replay_is_active()){ simcall_comm_test__set__result(simcall, synchro->comm.src_proc && synchro->comm.dst_proc); if(simcall_comm_test__get__result(simcall)){ synchro->state = SIMIX_DONE; @@ -657,7 +655,7 @@ void simcall_HANDLER_comm_testany(smx_simcall_t simcall, xbt_dynar_t synchros) smx_synchro_t synchro; simcall_comm_testany__set__result(simcall, -1); - if (MC_is_active()){ + if (MC_is_active() || MC_record_replay_is_active()){ int idx = SIMCALL_GET_MC_VALUE(simcall); if(idx == -1){ SIMIX_simcall_answer(simcall); @@ -687,7 +685,7 @@ void simcall_HANDLER_comm_waitany(smx_simcall_t simcall, xbt_dynar_t synchros) smx_synchro_t synchro; unsigned int cursor = 0; - if (MC_is_active()){ + if (MC_is_active() || MC_record_replay_is_active()){ int idx = SIMCALL_GET_MC_VALUE(simcall); synchro = xbt_dynar_get_as(synchros, idx, smx_synchro_t); xbt_fifo_push(synchro->simcalls, simcall); @@ -791,7 +789,7 @@ void SIMIX_comm_finish(smx_synchro_t synchro) continue; // if process handling comm is killed if (simcall->call == SIMCALL_COMM_WAITANY) { SIMIX_waitany_remove_simcall_from_actions(simcall); - if (!MC_is_active()) + if (!MC_is_active() && !MC_record_replay_is_active()) simcall_comm_waitany__set__result(simcall, xbt_dynar_search(simcall_comm_waitany__get__comms(simcall), &synchro)); } @@ -945,6 +943,7 @@ void SIMIX_comm_cancel(smx_synchro_t synchro) synchro->state = SIMIX_CANCELED; } else if (!MC_is_active() /* when running the MC there are no surf actions */ + && !MC_record_replay_is_active() && (synchro->state == SIMIX_READY || synchro->state == SIMIX_RUNNING)) { surf_action_cancel(synchro->comm.surf_comm);