From f8bd40cd609b53da0cf4d9a02a2aa09b6b307aac Mon Sep 17 00:00:00 2001 From: Eyck Jentzsch Date: Wed, 8 May 2024 17:19:37 +0200 Subject: [PATCH] adds error catching code to close databases properly --- src/sc_main.cpp | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/src/sc_main.cpp b/src/sc_main.cpp index 7ad3209..6ff5088 100644 --- a/src/sc_main.cpp +++ b/src/sc_main.cpp @@ -7,6 +7,8 @@ #include "factory.h" #include +#include +#include #include #include #include @@ -16,19 +18,26 @@ using namespace scc; using namespace sc_core; +jmp_buf abrt; +void ABRThandler(int sig) { longjmp(abrt, 1); } + int sc_main(int argc, char* argv[]) { + signal(SIGABRT, ABRThandler); auto my_name = util::split(argv[0], '/').back(); - scc::init_logging(LogConfig().logLevel(getenv("SCC_TEST_VERBOSE") ? log::DEBUG : log::FATAL).logAsync(false).msgTypeFieldWidth(35)); + scc::init_logging(LogConfig().logLevel(getenv("SCC_TEST_VERBOSE") ? log::TRACE : log::FATAL).logAsync(false).msgTypeFieldWidth(35)); // create tracer if environment variable SCC_TEST_TRACE is defined std::unique_ptr tracer; if(getenv("SCC_TEST_TRACE")) - tracer = std::make_unique(my_name, scc::tracer::file_type::TEXT, true); - // instantiate design(s) - factory::get_instance().create(); - // run tests - int result = Catch::Session().run(argc, argv); - // destroy design(s) - sc_stop(); - factory::get_instance().destroy(); + tracer = std::make_unique(my_name, scc::tracer::NONE, scc::tracer::ENABLE); + int result = -1; + if(setjmp(abrt) == 0) { + // instantiate design(s) + factory::get_instance().create(); + // run tests + result = Catch::Session().run(argc, argv); + // destroy design(s) + sc_stop(); + factory::get_instance().destroy(); + } return result; }