X-Git-Url: https://git.libre-soc.org/?p=mesa.git;a=blobdiff_plain;f=src%2Futil%2Fu_thread.h;h=af44bcfc1bd6c0ab97b9ca27e146e49a8c4966f8;hp=ec0d9a7f36fcb7b7e9e14d1b3ac83249ceebf34f;hb=55765f80;hpb=8d473f555a0c3c94cffd18e68a13274488dcfb17 diff --git a/src/util/u_thread.h b/src/util/u_thread.h index ec0d9a7f36f..af44bcfc1bd 100644 --- a/src/util/u_thread.h +++ b/src/util/u_thread.h @@ -31,11 +31,26 @@ #include #include "c11/threads.h" +#include "detect_os.h" #ifdef HAVE_PTHREAD #include +#ifdef HAVE_PTHREAD_NP_H +#include +#endif +#endif + +#ifdef __HAIKU__ +#include #endif +#ifdef __FreeBSD__ +/* pthread_np.h -> sys/param.h -> machine/param.h + * - defines ALIGN which clashes with our ALIGN + */ +#undef ALIGN +#define cpu_set_t cpuset_t +#endif static inline thrd_t u_thread_create(int (*routine)(void *), void *param) { @@ -45,7 +60,8 @@ static inline thrd_t u_thread_create(int (*routine)(void *), void *param) int ret; sigfillset(&new_set); - pthread_sigmask(SIG_SETMASK, &new_set, &saved_set); + sigdelset(&new_set, SIGSYS); + pthread_sigmask(SIG_BLOCK, &new_set, &saved_set); ret = thrd_create( &thread, routine, param ); pthread_sigmask(SIG_SETMASK, &saved_set, NULL); #else @@ -61,11 +77,19 @@ static inline thrd_t u_thread_create(int (*routine)(void *), void *param) static inline void u_thread_setname( const char *name ) { #if defined(HAVE_PTHREAD) -# if defined(__GNU_LIBRARY__) && defined(__GLIBC__) && defined(__GLIBC_MINOR__) && \ - (__GLIBC__ >= 3 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 12)) && \ - defined(__linux__) +#if DETECT_OS_LINUX || DETECT_OS_CYGWIN || DETECT_OS_SOLARIS pthread_setname_np(pthread_self(), name); -# endif +#elif DETECT_OS_FREEBSD || DETECT_OS_OPENBSD + pthread_set_name_np(pthread_self(), name); +#elif DETECT_OS_NETBSD + pthread_setname_np(pthread_self(), "%s", (void *)name); +#elif DETECT_OS_APPLE + pthread_setname_np(name); +#elif DETECT_OS_HAIKU + rename_thread(find_thread(NULL), name); +#else +#warning Not sure how to call pthread_setname_np +#endif #endif (void)name; } @@ -83,7 +107,7 @@ static inline void u_thread_setname( const char *name ) static inline void util_pin_thread_to_L3(thrd_t thread, unsigned L3_index, unsigned cores_per_L3) { -#if defined(HAVE_PTHREAD) +#if defined(HAVE_PTHREAD_SETAFFINITY) cpu_set_t cpuset; CPU_ZERO(&cpuset); @@ -103,7 +127,7 @@ util_pin_thread_to_L3(thrd_t thread, unsigned L3_index, unsigned cores_per_L3) static inline int util_get_L3_for_pinned_thread(thrd_t thread, unsigned cores_per_L3) { -#if defined(HAVE_PTHREAD) +#if defined(HAVE_PTHREAD_SETAFFINITY) cpu_set_t cpuset; if (pthread_getaffinity_np(thread, sizeof(cpuset), &cpuset) == 0) { @@ -135,7 +159,7 @@ util_get_L3_for_pinned_thread(thrd_t thread, unsigned cores_per_L3) static inline int64_t u_thread_get_time_nano(thrd_t thread) { -#if defined(__linux__) && defined(HAVE_PTHREAD) +#if defined(HAVE_PTHREAD) && !defined(__APPLE__) && !defined(__HAIKU__) struct timespec ts; clockid_t cid; @@ -150,10 +174,7 @@ u_thread_get_time_nano(thrd_t thread) static inline bool u_thread_is_self(thrd_t thread) { #if defined(HAVE_PTHREAD) -# if defined(__GNU_LIBRARY__) && defined(__GLIBC__) && defined(__GLIBC_MINOR__) && \ - (__GLIBC__ >= 3 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 12)) return pthread_equal(pthread_self(), thread); -# endif #endif return false; }