[threading] Use a RT signal for abort when possible.
authorRodrigo Kumpera <kumpera@gmail.com>
Mon, 2 Feb 2015 16:04:37 +0000 (11:04 -0500)
committerRodrigo Kumpera <kumpera@gmail.com>
Mon, 23 Mar 2015 20:09:36 +0000 (16:09 -0400)
mono/utils/mono-threads-posix.c

index 7a3b977a539ebf10eb9df9bc6f1fec953b9f65f8..0afc71191c31fed3ab3861fb15184aba8c8c7f54 100644 (file)
@@ -305,7 +305,6 @@ static sigset_t suspend_ack_signal_mask;
 #define DEFAULT_SUSPEND_SIGNAL SIGPWR
 #endif
 #define DEFAULT_RESTART_SIGNAL SIGXCPU
-#define DEFAULT_ABORT_SIGNAL SIGWINCH
 
 static int
 mono_thread_search_alt_signal (int min_signal)
@@ -365,6 +364,26 @@ mono_thread_get_alt_resume_signal (void)
 }
 
 
+static int
+mono_threads_get_abort_signal (void)
+{
+#if defined(PLATFORM_ANDROID)
+       return SIGTTIN;
+#elif !defined (SIGRTMIN)
+#ifdef SIGTTIN
+       return SIGTTIN;
+#else
+       return -1;
+#endif /* SIGRTMIN */
+#else
+       static int abort_signum = -1;
+       if (abort_signum == -1)
+               abort_signum = mono_thread_search_alt_signal (mono_thread_get_alt_resume_signal () + 1);
+       return abort_signum;
+#endif /* SIGRTMIN */
+}
+
+
 #if !defined(__native_client__)
 static void
 restart_signal_handler (int _dummy, siginfo_t *_info, void *context)
@@ -486,7 +505,7 @@ mono_threads_init_platform (void)
 {
        sigset_t signal_set;
 
-       abort_signal_num = DEFAULT_ABORT_SIGNAL;
+       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;