[runtime] Add support for setting the native thread name on linux.
authorZoltan Varga <vargaz@gmail.com>
Sat, 29 Mar 2014 23:45:01 +0000 (00:45 +0100)
committerZoltan Varga <vargaz@gmail.com>
Sat, 29 Mar 2014 23:45:37 +0000 (00:45 +0100)
configure.in
mono/metadata/threads.c
mono/utils/mono-threads-posix.c
mono/utils/mono-threads-windows.c
mono/utils/mono-threads.c
mono/utils/mono-threads.h

index 466a096c1ecc08df0a4639ddc1061726904213c8..082d9370c107b6afca3dd96113e8dbb0d86aedb1 100644 (file)
@@ -1582,7 +1582,7 @@ if test x$target_win32 = xno; then
        AC_CHECK_HEADERS(pthread.h)
        AC_CHECK_HEADERS(pthread_np.h)
        AC_CHECK_FUNCS(pthread_mutex_timedlock)
-       AC_CHECK_FUNCS(pthread_getattr_np pthread_attr_get_np)
+       AC_CHECK_FUNCS(pthread_getattr_np pthread_attr_get_np pthread_setname_np)
        AC_CHECK_FUNCS(pthread_kill)
        AC_MSG_CHECKING(for PTHREAD_MUTEX_RECURSIVE)
        AC_TRY_COMPILE([ #include <pthread.h>], [
index 867a4ce8d483d7f74376c4a5fdc50bcaf33b78a2..656e73e81bedc6f2ab2ce128618fee5e55b14838 100755 (executable)
@@ -1183,6 +1183,7 @@ mono_thread_set_name_internal (MonoInternalThread *this_obj, MonoString *name, g
        if (this_obj->name) {
                char *tname = mono_string_to_utf8 (name);
                mono_profiler_thread_name (this_obj->tid, tname);
+               mono_thread_info_set_name (this_obj->tid, tname);
                mono_free (tname);
        }
 }
index 34616364105bdc4edd52305a1999f6f9cb1f154e..37bc7580da51fd08cc59b13c61fba969a73b1fdc 100644 (file)
@@ -533,6 +533,22 @@ mono_native_thread_create (MonoNativeThreadId *tid, gpointer func, gpointer arg)
        return pthread_create (tid, NULL, func, arg) == 0;
 }
 
+void
+mono_threads_core_set_name (MonoNativeThreadId tid, const char *name)
+{
+#ifdef HAVE_PTHREAD_SETNAME_NP
+       if (!name) {
+               pthread_setname_np (tid, "");
+       } else {
+               char n [16];
+
+               strncpy (n, name, 16);
+               n [15] = '\0';
+               pthread_setname_np (tid, n);
+       }
+#endif
+}
+
 #endif /*!defined (__MACH__)*/
 
 #endif
index bf061dded81f76fdfbb365e9af1a23049975a744..3dcd0ca169cfef11c22a1d16adbae1197e2e1b88 100644 (file)
@@ -256,4 +256,9 @@ mono_threads_core_open_thread_handle (HANDLE handle, MonoNativeThreadId tid)
        return OpenThread (THREAD_ALL_ACCESS, TRUE, tid);
 }
 
+void
+mono_threads_core_set_name (MonoNativeThreadId tid, const char *name)
+{
+}
+
 #endif
index 73233b23b41b61e8a545dea1816a7057dcec214a..60615489783ef972cccd5c6c6782e7c05ec29149 100644 (file)
@@ -785,3 +785,9 @@ mono_threads_open_thread_handle (HANDLE handle, MonoNativeThreadId tid)
 {
        return mono_threads_core_open_thread_handle (handle, tid);
 }
+
+void
+mono_thread_info_set_name (MonoNativeThreadId tid, const char *name)
+{
+       mono_threads_core_set_name (tid, name);
+}
index 55555bd3e36bc316244d95f1327ffe5633933a13..f03bfeffbec4b66e608d5e3f693e5183f8e12b6d 100644 (file)
@@ -243,6 +243,9 @@ mono_thread_info_safe_suspend_sync (MonoNativeThreadId tid, gboolean interrupt_k
 gboolean
 mono_thread_info_resume (MonoNativeThreadId tid) MONO_INTERNAL;
 
+void
+mono_thread_info_set_name (MonoNativeThreadId tid, const char *name) MONO_INTERNAL;
+
 void
 mono_thread_info_finish_suspend (void) MONO_INTERNAL;
 
@@ -327,6 +330,7 @@ void mono_threads_core_exit (int exit_code) MONO_INTERNAL;
 void mono_threads_core_unregister (THREAD_INFO_TYPE *info) MONO_INTERNAL;
 HANDLE mono_threads_core_open_handle (void) MONO_INTERNAL;
 HANDLE mono_threads_core_open_thread_handle (HANDLE handle, MonoNativeThreadId tid) MONO_INTERNAL;
+void mono_threads_core_set_name (MonoNativeThreadId tid, const char *name) MONO_INTERNAL;
 
 MonoNativeThreadId mono_native_thread_id_get (void) MONO_INTERNAL;