From: Martin Quinson Date: Wed, 29 Aug 2018 19:24:26 +0000 (+0200) Subject: Convert all xbt_ex(network_error) throwing locations X-Git-Tag: v3_21~135 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/c9c7beb7e2a457c51a9c4252e8b31b1c9a4ca094?hp=45aa913504591455ff834cb93886ba69f3db3a18 Convert all xbt_ex(network_error) throwing locations --- diff --git a/include/simgrid/Exception.hpp b/include/simgrid/Exception.hpp index 1f3d2b363d..9ea27ab704 100644 --- a/include/simgrid/Exception.hpp +++ b/include/simgrid/Exception.hpp @@ -121,6 +121,11 @@ public: /** Exception raised when a communication fails because of the network */ class NetworkFailureException : public xbt_ex { +public: + NetworkFailureException(simgrid::xbt::ThrowPoint throwpoint, std::string message) : xbt_ex(throwpoint, message) + { + category = network_error; + } }; /** Exception raised when something got canceled before completion */ diff --git a/src/simix/smx_network.cpp b/src/simix/smx_network.cpp index 06f3d27c10..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: @@ -607,8 +610,11 @@ 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 {