Пример #1
0
void
mono_threads_init_platform (void)
{
	sigset_t signal_set;

	abort_signal_num = mono_threads_get_abort_signal ();
	if (mono_thread_info_unified_management_enabled ()) {
		suspend_signal_num = DEFAULT_SUSPEND_SIGNAL;
		restart_signal_num = DEFAULT_RESTART_SIGNAL;
	} else {
		suspend_signal_num = mono_thread_get_alt_suspend_signal ();
		restart_signal_num = mono_thread_get_alt_resume_signal ();
	}

	sigfillset (&suspend_signal_mask);
	sigdelset (&suspend_signal_mask, restart_signal_num);

	sigemptyset (&suspend_ack_signal_mask);
	sigaddset (&suspend_ack_signal_mask, restart_signal_num);

	mono_posix_add_signal_handler (suspend_signal_num, suspend_signal_handler, SA_RESTART);
	mono_posix_add_signal_handler (restart_signal_num, restart_signal_handler, SA_RESTART);
	mono_posix_add_signal_handler (abort_signal_num, abort_signal_handler, 0);

	/* ensure all the new signals are unblocked */
	sigemptyset (&signal_set);
	sigaddset (&signal_set, suspend_signal_num);
	sigaddset (&signal_set, restart_signal_num);
	sigaddset (&signal_set, abort_signal_num);
	sigprocmask (SIG_UNBLOCK, &signal_set, NULL);
}
Пример #2
0
void
mono_threads_init_platform (void)
{
#if !defined(__native_client__)
	/*
	FIXME we should use all macros from mini to make this more portable
	FIXME it would be very sweet if sgen could end up using this too.
	*/
	if (mono_thread_info_new_interrupt_enabled ())
		mono_posix_add_signal_handler (mono_thread_get_abort_signal (), suspend_signal_handler);
#endif
}