X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/059ffba3002aa86e17392c7f2c884095ab64591b..a62f7fd52f7273e5cfb7de48e8d530f805c67d74:/src/simix/smx_network.c diff --git a/src/simix/smx_network.c b/src/simix/smx_network.c index da59e87a51..c72e0af016 100644 --- a/src/simix/smx_network.c +++ b/src/simix/smx_network.c @@ -20,8 +20,8 @@ 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_rdv_push(smx_rdv_t rdv, smx_action_t comm); static smx_action_t SIMIX_rdv_get_comm(smx_rdv_t rdv, e_smx_comm_type_t type, - int (*match_fun)(void *, void *,smx_action_t), - void *user_data, smx_action_t my_action); + int (*match_fun)(void *, void *,smx_action_t), + void *user_data, smx_action_t my_action); static void SIMIX_rdv_free(void *data); void SIMIX_network_init(void) @@ -518,7 +518,7 @@ XBT_INLINE void SIMIX_comm_start(smx_action_t action) /* If a link is failed, detect it immediately */ if (surf_workstation_model->action_state_get(action->comm.surf_comm) == SURF_ACTION_FAILED) { XBT_DEBUG("Communication from '%s' to '%s' failed to start because of a link failure", - SIMIX_host_get_name(sender), SIMIX_host_get_name(receiver)); + SIMIX_host_get_name(sender), SIMIX_host_get_name(receiver)); action->state = SIMIX_LINK_FAILURE; SIMIX_comm_destroy_internal_actions(action); } @@ -589,14 +589,16 @@ void SIMIX_comm_finish(smx_action_t action) case SIMIX_SRC_HOST_FAILURE: if (simcall->issuer == action->comm.src_proc) - SMX_EXCEPTION(simcall->issuer, host_error, 0, "Host failed"); + simcall->issuer->context->iwannadie = 1; +// SMX_EXCEPTION(simcall->issuer, host_error, 0, "Host failed"); else SMX_EXCEPTION(simcall->issuer, network_error, 0, "Remote peer failed"); break; case SIMIX_DST_HOST_FAILURE: if (simcall->issuer == action->comm.dst_proc) - SMX_EXCEPTION(simcall->issuer, host_error, 0, "Host failed"); + simcall->issuer->context->iwannadie = 1; +// SMX_EXCEPTION(simcall->issuer, host_error, 0, "Host failed"); else SMX_EXCEPTION(simcall->issuer, network_error, 0, "Remote peer failed"); break; @@ -640,6 +642,11 @@ void SIMIX_comm_finish(smx_action_t action) } } + if (surf_workstation_model->extension. + workstation.get_state(simcall->issuer->smx_host->host) != SURF_RESOURCE_ON) { + simcall->issuer->context->iwannadie = 1; + } + simcall->issuer->waiting_action = NULL; xbt_fifo_remove(simcall->issuer->comms, action); SIMIX_simcall_answer(simcall); @@ -671,7 +678,7 @@ void SIMIX_post_comm(smx_action_t action) action->state = SIMIX_DST_HOST_FAILURE; else if (action->comm.surf_comm && surf_workstation_model->action_state_get(action->comm.surf_comm) == SURF_ACTION_FAILED) { - XBT_DEBUG("Puta madre. Surf says that the link broke"); + XBT_DEBUG("Puta madre. Surf says that the link broke"); action->state = SIMIX_LINK_FAILURE; } else action->state = SIMIX_DONE; @@ -858,7 +865,7 @@ void SIMIX_comm_copy_data(smx_action_t comm) { size_t buff_size = comm->comm.src_buff_size; /* If there is no data to be copy then return */ - if (!comm->comm.src_buff || !comm->comm.dst_buff || comm->comm.copied == 1) + if (!comm->comm.src_buff || !comm->comm.dst_buff || comm->comm.copied) return; XBT_DEBUG("Copying comm %p data from %s (%p) -> %s (%p) (%zu bytes)",