=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: build: Check how many arguments pthread_setname_np() takes.

Alexandre Julliard julliard at winehq.org
Thu Aug 16 13:42:21 CDT 2018


Module: vkd3d
Branch: master
Commit: d9858b63b9579efba625d6a591ca8b0249c6e541
URL:    https://source.winehq.org/git/vkd3d.git/?a=commit;h=d9858b63b9579efba625d6a591ca8b0249c6e541

Author: Józef Kucia <jkucia at codeweavers.com>
Date:   Wed Aug 15 18:13:32 2018 +0200

build: Check how many arguments pthread_setname_np() takes.

Based on a patch by Chip Davis.

Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 configure.ac               |  2 +-
 libs/vkd3d/command.c       |  4 +---
 libs/vkd3d/vkd3d_private.h |  9 +++++++++
 m4/check-functions.m4      | 39 +++++++++++++++++++++++++++++++++++++++
 4 files changed, 50 insertions(+), 4 deletions(-)

diff --git a/configure.ac b/configure.ac
index a610449..d437e1b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -94,7 +94,7 @@ VKD3D_CHECK_FUNC([HAVE_BUILTIN_POPCOUNT], [__builtin_popcount], [__builtin_popco
 VKD3D_CHECK_FUNC([HAVE_SYNC_ADD_AND_FETCH], [__sync_add_and_fetch], [__sync_add_and_fetch((int *)0, 0)])
 VKD3D_CHECK_FUNC([HAVE_SYNC_SUB_AND_FETCH], [__sync_sub_and_fetch], [__sync_sub_and_fetch((int *)0, 0)])
 
-VKD3D_CHECK_LIB_FUNCS([pthread_setname_np], [$PTHREAD_LIBS])
+VKD3D_CHECK_PTHREAD_SETNAME_NP
 
 AM_CONDITIONAL([BUILD_DEMOS], [test "x$enable_demos" = "xyes"])
 AM_CONDITIONAL([HAVE_WIDL], [test "x$WIDL" != "xno"])
diff --git a/libs/vkd3d/command.c b/libs/vkd3d/command.c
index ce5f60f..9aba589 100644
--- a/libs/vkd3d/command.c
+++ b/libs/vkd3d/command.c
@@ -200,9 +200,7 @@ static void *vkd3d_fence_worker_main(void *arg)
     struct vkd3d_fence_worker *worker = arg;
     int rc;
 
-#ifdef HAVE_PTHREAD_SETNAME_NP
-    pthread_setname_np(pthread_self(), "vkd3d_worker");
-#endif
+    vkd3d_set_thread_name("vkd3d_worker");
 
     for (;;)
     {
diff --git a/libs/vkd3d/vkd3d_private.h b/libs/vkd3d/vkd3d_private.h
index f9a2f5a..278f4f6 100644
--- a/libs/vkd3d/vkd3d_private.h
+++ b/libs/vkd3d/vkd3d_private.h
@@ -826,4 +826,13 @@ HRESULT vkd3d_load_vk_device_procs(struct vkd3d_vk_device_procs *procs,
 
 extern const char vkd3d_build[];
 
+static inline void vkd3d_set_thread_name(const char *name)
+{
+#if defined(HAVE_PTHREAD_SETNAME_NP_2)
+    pthread_setname_np(pthread_self(), name);
+#elif defined(HAVE_PTHREAD_SETNAME_NP_1)
+    pthread_setname_np(name);
+#endif
+}
+
 #endif  /* __VKD3D_PRIVATE_H */
diff --git a/m4/check-functions.m4 b/m4/check-functions.m4
index 17082a1..4d018d6 100644
--- a/m4/check-functions.m4
+++ b/m4/check-functions.m4
@@ -14,3 +14,42 @@ AC_DEFUN([VKD3D_CHECK_LIB_FUNCS],
 LIBS="$LIBS $2"
 AC_CHECK_FUNCS([$1], [$3], [$4])
 LIBS="$vkd3d_libs_saved"])
+
+dnl VKD3D_CHECK_WHICH_PTHREAD_SETNAME_NP
+AC_DEFUN([VKD3D_CHECK_WHICH_PTHREAD_SETNAME_NP],
+         [AC_MSG_CHECKING([how many arguments pthread_set_np() takes])
+         AC_CACHE_VAL([vkd3d_cv_which_pthread_set_np], [
+
+vkd3d_cv_which_pthread_set_np=unknown
+
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>],
+                                   [pthread_setname_np(pthread_self(), "conftest")])],
+                                   [vkd3d_cv_which_pthread_set_np=two])
+
+AS_IF([test "$vkd3d_cv_which_pthread_set_np" = "unknown"],
+      [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>],
+                                          [pthread_setname_np("conftest")])],
+                                          [vkd3d_cv_which_pthread_set_np=one])])
+
+]) dnl AC_CACHE_VAL
+
+AS_CASE(["$vkd3d_cv_which_pthread_set_np"],
+        [one],
+        [AC_DEFINE([HAVE_PTHREAD_SETNAME_NP_1], [1],
+                   [Define to 1 if you have the one-argument variant of pthread_setname_np().])
+        AC_MSG_RESULT([one])],
+
+        [two],
+        [AC_DEFINE([HAVE_PTHREAD_SETNAME_NP_2], [1],
+                   [Define to 1 if you have the two-argument variant of pthread_setname_np().])
+        AC_MSG_RESULT([two])],
+
+        [AC_MSG_RESULT([unknown])])
+
+]) dnl AC_DEFUN
+
+dnl VKD3D_CHECK_PTHREAD_SETNAME_NP
+AC_DEFUN([VKD3D_CHECK_PTHREAD_SETNAME_NP],
+         [VKD3D_CHECK_LIB_FUNCS([pthread_setname_np], [$PTHREAD_LIBS])
+         AS_IF([test "x$ac_cv_func_pthread_setname_np" = "xyes"],
+               [VKD3D_CHECK_WHICH_PTHREAD_SETNAME_NP])])




More information about the wine-cvs mailing list