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); }
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 }