Merge pull request #5714 from alexischr/update_bockbuild
[mono.git] / mono / utils / mono-threads-posix.c
index 9ee2a77402de20bebbca6cabbd61ec0a3f7917bd..6804024e156a0a6a31ff4c9ff3db282344197a02 100644 (file)
@@ -22,7 +22,7 @@
 
 #include <errno.h>
 
-#if defined(PLATFORM_ANDROID) && !defined(TARGET_ARM64) && !defined(TARGET_AMD64)
+#if defined(HOST_ANDROID) && !defined(TARGET_ARM64) && !defined(TARGET_AMD64)
 #define USE_TKILL_ON_ANDROID 1
 #endif
 
@@ -30,7 +30,7 @@
 extern int tkill (pid_t tid, int signal);
 #endif
 
-#if defined(_POSIX_VERSION) || defined(__native_client__)
+#if defined(_POSIX_VERSION) && !defined (TARGET_WASM)
 
 #include <pthread.h>
 
@@ -142,22 +142,29 @@ int
 mono_threads_pthread_kill (MonoThreadInfo *info, int signum)
 {
        THREADS_SUSPEND_DEBUG ("sending signal %d to %p[%p]\n", signum, info, mono_thread_info_get_tid (info));
+
+       int result;
+
 #ifdef USE_TKILL_ON_ANDROID
-       int result, old_errno = errno;
+       int old_errno = errno;
+
        result = tkill (info->native_handle, signum);
+
        if (result < 0) {
                result = errno;
                errno = old_errno;
        }
-       return result;
-#elif defined(__native_client__)
-       /* Workaround pthread_kill abort() in NaCl glibc. */
-       return 0;
-#elif !defined(HAVE_PTHREAD_KILL)
-       g_error ("pthread_kill() is not supported by this platform");
+#elif defined (HAVE_PTHREAD_KILL)
+       result = pthread_kill (mono_thread_info_get_tid (info), signum);
 #else
-       return pthread_kill (mono_thread_info_get_tid (info), signum);
+       result = -1;
+       g_error ("pthread_kill () is not supported by this platform");
 #endif
+
+       if (result && result != ESRCH)
+               g_error ("%s: pthread_kill failed with error %d - potential kernel OOM or signal queue overflow", __func__, result);
+
+       return result;
 }
 
 MonoNativeThreadId
@@ -199,7 +206,7 @@ mono_native_thread_set_name (MonoNativeThreadId tid, const char *name)
        } else {
                char n [63];
 
-               memcpy (n, name, sizeof (n) - 1);
+               strncpy (n, name, sizeof (n) - 1);
                n [sizeof (n) - 1] = '\0';
                pthread_setname_np (n);
        }
@@ -209,7 +216,7 @@ mono_native_thread_set_name (MonoNativeThreadId tid, const char *name)
        } else {
                char n [PTHREAD_MAX_NAMELEN_NP];
 
-               memcpy (n, name, sizeof (n) - 1);
+               strncpy (n, name, sizeof (n) - 1);
                n [sizeof (n) - 1] = '\0';
                pthread_setname_np (tid, "%s", (void*)n);
        }
@@ -219,7 +226,7 @@ mono_native_thread_set_name (MonoNativeThreadId tid, const char *name)
        } else {
                char n [16];
 
-               memcpy (n, name, sizeof (n) - 1);
+               strncpy (n, name, sizeof (n) - 1);
                n [sizeof (n) - 1] = '\0';
                pthread_setname_np (tid, n);
        }
@@ -234,7 +241,7 @@ mono_native_thread_join (MonoNativeThreadId tid)
        return !pthread_join (tid, &res);
 }
 
-#endif /* defined(_POSIX_VERSION) || defined(__native_client__) */
+#endif /* defined(_POSIX_VERSION) */
 
 #if defined(USE_POSIX_BACKEND)
 
@@ -288,7 +295,7 @@ mono_threads_suspend_abort_syscall (MonoThreadInfo *info)
 void
 mono_threads_suspend_register (MonoThreadInfo *info)
 {
-#if defined (PLATFORM_ANDROID)
+#if defined (HOST_ANDROID)
        info->native_handle = gettid ();
 #endif
 }