diff options
-rw-r--r-- | CMakeLists.txt | 40 | ||||
-rw-r--r-- | common/threads.cpp | 39 | ||||
-rw-r--r-- | config.h.in | 6 |
3 files changed, 26 insertions, 59 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index c9681de4..ad956b10 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -566,51 +566,11 @@ if(NOT WIN32) check_symbol_exists(pthread_setname_np "pthread.h;pthread_np.h" HAVE_PTHREAD_SETNAME_NP) if(NOT HAVE_PTHREAD_SETNAME_NP) check_symbol_exists(pthread_set_name_np "pthread.h;pthread_np.h" HAVE_PTHREAD_SET_NAME_NP) - else() - check_c_source_compiles(" -#include <pthread.h> -#include <pthread_np.h> -int main() -{ - pthread_setname_np(\"testname\"); - return 0; -}" - PTHREAD_SETNAME_NP_ONE_PARAM - ) - check_c_source_compiles(" -#include <pthread.h> -#include <pthread_np.h> -int main() -{ - pthread_setname_np(pthread_self(), \"%s\", \"testname\"); - return 0; -}" - PTHREAD_SETNAME_NP_THREE_PARAMS - ) endif() else() check_symbol_exists(pthread_setname_np pthread.h HAVE_PTHREAD_SETNAME_NP) if(NOT HAVE_PTHREAD_SETNAME_NP) check_symbol_exists(pthread_set_name_np pthread.h HAVE_PTHREAD_SET_NAME_NP) - else() - check_c_source_compiles(" -#include <pthread.h> -int main() -{ - pthread_setname_np(\"testname\"); - return 0; -}" - PTHREAD_SETNAME_NP_ONE_PARAM - ) - check_c_source_compiles(" -#include <pthread.h> -int main() -{ - pthread_setname_np(pthread_self(), \"%s\", \"testname\"); - return 0; -}" - PTHREAD_SETNAME_NP_THREE_PARAMS - ) endif() endif() endif() diff --git a/common/threads.cpp b/common/threads.cpp index e847d1f8..c782dc35 100644 --- a/common/threads.cpp +++ b/common/threads.cpp @@ -90,30 +90,43 @@ bool semaphore::try_wait() noexcept #else -#if defined(HAVE_PTHREAD_SETNAME_NP) || defined(HAVE_PTHREAD_SET_NAME_NP) #include <pthread.h> #ifdef HAVE_PTHREAD_NP_H #include <pthread_np.h> #endif +#include <tuple> + +namespace { + +using setname_t1 = int(*)(const char*); +using setname_t2 = int(*)(pthread_t, const char*); +using setname_t3 = int(*)(pthread_t, const char*, void*); + +void setname_caller(setname_t1 func, const char *name) +{ func(name); } + +void setname_caller(setname_t2 func, const char *name) +{ func(pthread_self(), name); } + +void setname_caller(setname_t3 func, const char *name) +{ func(pthread_self(), "%s", static_cast<void*>(const_cast<char*>(name))); } + +} // namespace void althrd_setname(const char *name) { #if defined(HAVE_PTHREAD_SET_NAME_NP) - pthread_set_name_np(pthread_self(), name); -#elif defined(PTHREAD_SETNAME_NP_ONE_PARAM) - pthread_setname_np(name); -#elif defined(PTHREAD_SETNAME_NP_THREE_PARAMS) - pthread_setname_np(pthread_self(), "%s", (void*)name); -#else - pthread_setname_np(pthread_self(), name); + setname_caller(pthread_set_name_np, name); +#elif defined(HAVE_PTHREAD_SETNAME_NP) + setname_caller(pthread_setname_np, name); #endif + /* Avoid unused function/parameter warnings. */ + std::ignore = name; + std::ignore = static_cast<void(*)(setname_t1,const char*)>(&setname_caller); + std::ignore = static_cast<void(*)(setname_t2,const char*)>(&setname_caller); + std::ignore = static_cast<void(*)(setname_t3,const char*)>(&setname_caller); } -#else - -void althrd_setname(const char*) { } -#endif - #ifdef __APPLE__ namespace al { diff --git a/config.h.in b/config.h.in index 588d45a5..416b87d4 100644 --- a/config.h.in +++ b/config.h.in @@ -112,11 +112,5 @@ /* Define if we have pthread_setname_np() */ #cmakedefine HAVE_PTHREAD_SETNAME_NP -/* Define if pthread_setname_np() only accepts one parameter */ -#cmakedefine PTHREAD_SETNAME_NP_ONE_PARAM - -/* Define if pthread_setname_np() accepts three parameters */ -#cmakedefine PTHREAD_SETNAME_NP_THREE_PARAMS - /* Define if we have pthread_set_name_np() */ #cmakedefine HAVE_PTHREAD_SET_NAME_NP |