diff --git a/configure.in b/configure.in index 3dfe0ab8fe..c954866597 100644 --- a/configure.in +++ b/configure.in @@ -2452,6 +2452,53 @@ if test x"$enable_pthread" = xyes; then else AC_CHECK_FUNCS(pthread_attr_init) fi + if test "$ac_cv_func_pthread_setname_np" = yes; then + AC_CACHE_CHECK([type of pthread_setname_np], [rb_cv_func_pthread_setname_np_type], + [rb_cv_func_pthread_setname_np_type= + if test "$rb_cv_func_pthread_setname_np_type" = ""; then + AC_TRY_COMPILE([ + @%:@include + @%:@ifdef HAVE_PTHREAD_NP_H + @%:@include + @%:@endif + ], + [if (pthread_setname_np(pthread_self(), "")) return 1;], + [rb_cv_func_pthread_setname_np_type=$rb_cv_func_pthread_setname_np_type,linux]) + fi + if test "$rb_cv_func_pthread_setname_np_type" = ""; then + AC_TRY_COMPILE([ + @%:@include + @%:@ifdef HAVE_PTHREAD_NP_H + @%:@include + @%:@endif + ], + [if (pthread_setname_np(pthread_self(), "", NULL)) return 1;], + [rb_cv_func_pthread_setname_np_type=$rb_cv_func_pthread_setname_np_type,bsd]) + fi + if test "$rb_cv_func_pthread_setname_np_type" = ""; then + AC_TRY_COMPILE([ + @%:@include + @%:@ifdef HAVE_PTHREAD_NP_H + @%:@include + @%:@endif + ], + [if (pthread_setname_np("")) return 1;], + [rb_cv_func_pthread_setname_np_type=$rb_cv_func_pthread_setname_np_type,darwin]) + fi + rb_cv_func_pthread_setname_np_type=${rb_cv_func_pthread_setname_np_type@%:@,} + ] + ) + AS_CASE(["$rb_cv_func_pthread_setname_np_type"], + [linux], + [AC_DEFINE_UNQUOTED(SET_THREAD_NAME(name), pthread_setname_np(pthread_self(), name))], + [bsd], + [AC_DEFINE_UNQUOTED(SET_THREAD_NAME(name), pthread_setname_np(pthread_self(), name, NULL))], + [darwin], + [AC_DEFINE_UNQUOTED(SET_THREAD_NAME(name), pthread_setname_np(name))], + [*], + [AC_DEFINE_UNQUOTED(SET_THREAD_NAME(name), (void)0)], + ) + fi fi if test x"$ac_cv_header_ucontext_h" = xyes; then if test x"$rb_with_pthread" = xyes; then diff --git a/thread_pthread.c b/thread_pthread.c index f42c51a3b8..581dfecaaa 100644 --- a/thread_pthread.c +++ b/thread_pthread.c @@ -1422,11 +1422,9 @@ timer_thread_sleep(rb_global_vm_lock_t* unused) #endif /* USE_SLEEPY_TIMER_THREAD */ #if defined(__linux__) && defined(PR_SET_NAME) +# undef SET_THREAD_NAME # define SET_THREAD_NAME(name) prctl(PR_SET_NAME, name) -#elif defined(HAVE_PTHREAD_SETNAME_NP) -/* pthread_setname_np() on Darwin does not have target thread argument */ -# define SET_THREAD_NAME(name) pthread_setname_np(name) -#else +#elif !defined(SET_THREAD_NAME) # define SET_THREAD_NAME(name) (void)0 #endif