From c9c7beb7e2a457c51a9c4252e8b31b1c9a4ca094 Mon Sep 17 00:00:00 2001 From: Martin Quinson Date: Wed, 29 Aug 2018 21:24:26 +0200 Subject: [PATCH] Convert all xbt_ex(network_error) throwing locations --- include/simgrid/Exception.hpp | 5 +++++ src/simix/smx_network.cpp | 14 ++++++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) 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 { -- 2.20.1