X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/c89cb255c89dd438dd1188565e98063da7dec57d..4a8bc21517c2e7759a0036d879338f84ed6bf56e:/src/simix/smx_network.cpp diff --git a/src/simix/smx_network.cpp b/src/simix/smx_network.cpp index 22c19a4435..464c6dd3b3 100644 --- a/src/simix/smx_network.cpp +++ b/src/simix/smx_network.cpp @@ -545,14 +545,16 @@ void SIMIX_comm_finish(smx_activity_t synchro) if (simcall->issuer == comm->src_proc) simcall->issuer->context_->iwannadie = 1; else - SMX_EXCEPTION(simcall->issuer, network_error, 0, "Remote peer failed"); + simcall->issuer->exception = + std::make_exception_ptr(simgrid::NetworkFailureException(XBT_THROW_POINT, "Remote peer failed")); break; case SIMIX_DST_HOST_FAILURE: if (simcall->issuer == comm->dst_proc) simcall->issuer->context_->iwannadie = 1; else - SMX_EXCEPTION(simcall->issuer, network_error, 0, "Remote peer failed"); + simcall->issuer->exception = + std::make_exception_ptr(simgrid::NetworkFailureException(XBT_THROW_POINT, "Remote peer failed")); break; case SIMIX_LINK_FAILURE: @@ -568,7 +570,8 @@ void SIMIX_comm_finish(smx_activity_t synchro) } else { XBT_DEBUG("I'm neither source nor dest"); } - SMX_EXCEPTION(simcall->issuer, network_error, 0, "Link failure"); + simcall->issuer->throw_exception( + std::make_exception_ptr(simgrid::NetworkFailureException(XBT_THROW_POINT, "Link failure"))); break; case SIMIX_CANCELED: @@ -587,7 +590,7 @@ void SIMIX_comm_finish(smx_activity_t synchro) if (simcall->issuer->exception && (simcall->call == SIMCALL_COMM_WAITANY || simcall->call == SIMCALL_COMM_TESTANY)) { // First retrieve the rank of our failing synchro - int rank; + int rank = -1; if (simcall->call == SIMCALL_COMM_WAITANY) { rank = xbt_dynar_search(simcall_comm_waitany__get__comms(simcall), &synchro); } else if (simcall->call == SIMCALL_COMM_TESTANY) { @@ -607,17 +610,17 @@ void SIMIX_comm_finish(smx_activity_t synchro) } catch (simgrid::TimeoutError& e) { e.value = rank; simcall->issuer->exception = std::make_exception_ptr(e); + } catch (simgrid::NetworkFailureException& e) { + e.value = rank; + simcall->issuer->exception = std::make_exception_ptr(e); } catch (xbt_ex& e) { - if (e.category == network_error || e.category == cancel_error) { + if (e.category == cancel_error) { e.value = rank; simcall->issuer->exception = std::make_exception_ptr(e); } else { xbt_die("Unexpected xbt_ex(%s). Please enhance this code", xbt_ex_catname(e.category)); } } - catch(...) { - // Nothing to do - } } if (simcall->issuer->host_->is_off()) {