Exemplo n.º 1
0
Arquivo: test.c Projeto: LA-Toth/tinu
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);
}
Exemplo n.º 2
0
/**
 * Handle SIGSEGV/SIGILL signals raised by threads
 */
static void segv_handler(int signal)
{
	backtrace_t *backtrace;

	DBG1(DBG_DMN, "thread %u received %d", thread_current_id(), signal);
	backtrace = backtrace_create(2);
	backtrace->log(backtrace, NULL, TRUE);
	backtrace->destroy(backtrace);

	DBG1(DBG_DMN, "killing ourself, received critical signal");
	abort();
}