aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt40
-rw-r--r--common/threads.cpp39
-rw-r--r--config.h.in6
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