[libcxx-commits] [PATCH] D91875: [SystemZ][ZOS] Fix the usage of pthread_t within libc++
Zbigniew Sarbinowski via Phabricator via libcxx-commits
libcxx-commits at lists.llvm.org
Fri Dec 4 11:29:56 PST 2020
zibi updated this revision to Diff 309592.
zibi marked an inline comment as done.
zibi added a comment.
Unify `pthread_t` initialization across all platforms.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D91875/new/
https://reviews.llvm.org/D91875
Files:
libcxx/include/__config
libcxx/include/__threading_support
Index: libcxx/include/__threading_support
===================================================================
--- libcxx/include/__threading_support
+++ libcxx/include/__threading_support
@@ -26,7 +26,7 @@
#if defined(_LIBCPP_HAS_THREAD_API_PTHREAD)
# include <pthread.h>
# include <sched.h>
-# ifdef __APPLE__
+# if defined(__APPLE__) || defined(__MVS__)
# define _LIBCPP_NO_NATIVE_SEMAPHORES
# endif
# ifndef _LIBCPP_NO_NATIVE_SEMAPHORES
@@ -82,11 +82,14 @@
#define _LIBCPP_EXEC_ONCE_INITIALIZER PTHREAD_ONCE_INIT
// Thread id
-typedef pthread_t __libcpp_thread_id;
+#if defined(__MVS__)
+ typedef unsigned long long __libcpp_thread_id;
+#else
+ typedef pthread_t __libcpp_thread_id;
+#endif
// Thread
-#define _LIBCPP_NULL_THREAD 0U
-
+#define _LIBCPP_NULL_THREAD ((__libcpp_thread_t()))
typedef pthread_t __libcpp_thread_t;
// Thread Local Storage
@@ -481,7 +484,7 @@
// Returns non-zero if the thread ids are equal, otherwise 0
bool __libcpp_thread_id_equal(__libcpp_thread_id t1, __libcpp_thread_id t2)
{
- return pthread_equal(t1, t2) != 0;
+ return t1 == t2;
}
// Returns non-zero if t1 < t2, otherwise 0
@@ -492,7 +495,7 @@
// Thread
bool __libcpp_thread_isnull(const __libcpp_thread_t *__t) {
- return *__t == 0;
+ return __libcpp_thread_get_id(__t) == 0;
}
int __libcpp_thread_create(__libcpp_thread_t *__t, void *(*__func)(void *),
@@ -503,12 +506,17 @@
__libcpp_thread_id __libcpp_thread_get_current_id()
{
- return pthread_self();
+ const __libcpp_thread_t thread = pthread_self();
+ return __libcpp_thread_get_id(&thread);
}
__libcpp_thread_id __libcpp_thread_get_id(const __libcpp_thread_t *__t)
{
+#if defined(__MVS__)
+ return __t->__;
+#else
return *__t;
+#endif
}
int __libcpp_thread_join(__libcpp_thread_t *__t)
Index: libcxx/include/__config
===================================================================
--- libcxx/include/__config
+++ libcxx/include/__config
@@ -1126,6 +1126,7 @@
defined(__APPLE__) || \
defined(__CloudABI__) || \
defined(__sun__) || \
+ defined(__MVS__) || \
(defined(__MINGW32__) && __has_include(<pthread.h>))
# define _LIBCPP_HAS_THREAD_API_PTHREAD
# elif defined(__Fuchsia__)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D91875.309592.patch
Type: text/x-patch
Size: 2226 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libcxx-commits/attachments/20201204/cf108076/attachment.bin>
More information about the libcxx-commits
mailing list