X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/aa30bf6e0f4908e00e77ad0e132aca707df9fa9c..72835f76b7caa8db8b8ec156c8d5522225ecb200:/src/xbt/exception.cpp diff --git a/src/xbt/exception.cpp b/src/xbt/exception.cpp index 8b9c3d3219..5aa9eae501 100644 --- a/src/xbt/exception.cpp +++ b/src/xbt/exception.cpp @@ -1,10 +1,9 @@ -/* Copyright (c) 2005-2021. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2005-2023. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #include "simgrid/Exception.hpp" -#include "src/kernel/context/Context.hpp" #include #include @@ -25,8 +24,7 @@ void _xbt_throw(char* message, const char* file, int line, const char* func) throw e; } -namespace simgrid { -namespace xbt { +namespace simgrid::xbt { ImpossibleError::~ImpossibleError() = default; InitializationError::~InitializationError() = default; @@ -79,17 +77,15 @@ static void show_backtrace(const simgrid::xbt::Backtrace& bt) static std::terminate_handler previous_terminate_handler = nullptr; -static void handler() +XBT_ATTRIB_NORETURN static void handler() { // Avoid doing crazy things if we get an uncaught exception inside an uncaught exception - static std::atomic_flag lock = ATOMIC_FLAG_INIT; - if (lock.test_and_set()) { + if (static std::atomic_flag lock = ATOMIC_FLAG_INIT; lock.test_and_set()) { XBT_ERROR("Handling an exception raised an exception. Bailing out."); std::abort(); } - // Get the current backtrace and exception - simgrid::xbt::Backtrace bt = simgrid::xbt::Backtrace(); + // Get the current exception and show backtrace try { std::rethrow_exception(std::current_exception()); } @@ -107,8 +103,7 @@ static void handler() } catch (const simgrid::ForcefulKillException&) { - XBT_ERROR("Received a ForcefulKillException at the top-level exception handler. Maybe a Java->C++ call that is not " - "protected in a try/catch?"); + XBT_ERROR("Received a ForcefulKillException at the top-level exception handler. Please help fix this bug."); } // We don't know how to manage other exceptions @@ -120,7 +115,7 @@ static void handler() } XBT_ERROR("Unknown uncaught exception"); } - show_backtrace(bt); + show_backtrace(simgrid::xbt::Backtrace()); std::abort(); } @@ -132,8 +127,7 @@ void install_exception_handler() }); } -} // namespace xbt -} // namespace simgrid +} // namespace simgrid::xbt void xbt_throw_impossible(const char* file, int line, const char* func) {