void _signal_handler(int signo) { Backtrace *trace; #ifdef COREDUMPER_ENABLED WriteCoreDump(core_file_name(g_test_context_current->m_core_dir, g_test_case_current->m_suite->m_name, g_test_case_current->m_name)); #endif trace = backtrace_create(3); log_error("Signal received while running a test", msg_tag_int("signal", signo), msg_tag_str("suite", g_test_case_current->m_suite->m_name), msg_tag_str("test", g_test_case_current->m_name), NULL); backtrace_dump_log(trace, " ", LOG_ERR); backtrace_unreference(trace); if (signo == SIGABRT) { _test_run_hooks(TEST_HOOK_SIGNAL_ABORT); g_test_case_current_result = TEST_ABORT; } else { _test_run_hooks(TEST_HOOK_SIGNAL_SEGFAULT); g_test_case_current_result = TEST_SEGFAULT; } setcontext(g_test_ucontext.uc_link); }
/* Writes the core file to disk. This is a convenience method wrapping * GetCoreDump(). If a core file could not be generated for any reason, * -1 is returned and errno is set appropriately. On success, zero is * returned. */ EC_BOOL ccoredumper_write(const char *file_name) { if(0 != WriteCoreDump(file_name)) { dbg_log(SEC_0107_CCOREDUMPER, 0)(LOGSTDOUT, "error:ccoredumper_write:failed to dump core to file %s\n", file_name); return (EC_FALSE); } return (EC_TRUE); }