static void SIG_HANDLER_SIGNATURE (sigquit_signal_handler) { gboolean res; GET_CONTEXT; /* We use this signal to start the attach agent too */ res = mono_attach_start (); if (res) return; if (mono_thread_info_new_interrupt_enabled ()) { mono_threads_request_thread_dump (); } else { printf ("Full thread dump:\n"); mono_threads_request_thread_dump (); /* * print_thread_dump () skips the current thread, since sending a signal * to it would invoke the signal handler below the sigquit signal handler, * and signal handlers don't create an lmf, so the stack walk could not * be performed. */ mono_print_thread_dump (ctx); } mono_chain_signal (SIG_HANDLER_PARAMS); }
MONO_SIG_HANDLER_FUNC (static, sigquit_signal_handler) { gboolean res; /* We use this signal to start the attach agent too */ res = mono_attach_start (); if (res) return; mono_threads_request_thread_dump (); mono_chain_signal (MONO_SIG_HANDLER_PARAMS); }