+#ifdef __MACH__
+ /*
+ * We can't set the thread name for other threads, but we can at least make
+ * it work for threads that try to change their own name.
+ */
+ if (tid != mono_native_thread_id_get ())
+ return;
+
+ if (!name) {
+ pthread_setname_np ("");
+ } else {
+ char n [63];
+
+ strncpy (n, name, 63);
+ n [62] = '\0';
+ pthread_setname_np (n);
+ }
+#elif defined (__NetBSD__)
+ if (!name) {
+ pthread_setname_np (tid, "%s", (void*)"");
+ } else {
+ char n [PTHREAD_MAX_NAMELEN_NP];
+
+ strncpy (n, name, PTHREAD_MAX_NAMELEN_NP);
+ n [PTHREAD_MAX_NAMELEN_NP - 1] = '\0';
+ pthread_setname_np (tid, "%s", (void*)n);
+ }
+#elif defined (HAVE_PTHREAD_SETNAME_NP)