[libcxx] r292027 - Attempt two at fixing threading on Windows

Eric Fiselier via cfe-commits cfe-commits at lists.llvm.org
Sat Jan 14 12:19:00 PST 2017


Author: ericwf
Date: Sat Jan 14 14:19:00 2017
New Revision: 292027

URL: http://llvm.org/viewvc/llvm-project?rev=292027&view=rev
Log:
Attempt two at fixing threading on Windows

Reviewers: compnerd

Subscribers: cfe-commits

Differential Revision: https://reviews.llvm.org/D28735

Modified:
    libcxx/trunk/include/__threading_support

Modified: libcxx/trunk/include/__threading_support
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/__threading_support?rev=292027&r1=292026&r2=292027&view=diff
==============================================================================
--- libcxx/trunk/include/__threading_support (original)
+++ libcxx/trunk/include/__threading_support Sat Jan 14 14:19:00 2017
@@ -495,7 +495,7 @@ struct __libcpp_beginthreadex_thunk_data
   void *__arg;
 };
 
-static inline _LIBCPP_ALWAYS_INLINE DWORD WINAPI
+static inline _LIBCPP_ALWAYS_INLINE unsigned WINAPI
 __libcpp_beginthreadex_thunk(void *__raw_data)
 {
   auto *__data =
@@ -503,7 +503,7 @@ __libcpp_beginthreadex_thunk(void *__raw
   auto *__func = __data->__func;
   void *__arg = __data->__arg;
   delete __data;
-  return static_cast<DWORD>(reinterpret_cast<uintptr_t>(__func(__arg)));
+  return static_cast<unsigned>(reinterpret_cast<uintptr_t>(__func(__arg)));
 }
 
 int __libcpp_thread_create(__libcpp_thread_t *__t, void *(*__func)(void *),
@@ -513,13 +513,10 @@ int __libcpp_thread_create(__libcpp_thre
   __data->__func = __func;
   __data->__arg = __arg;
 
-  *__t = CreateThread(
-    nullptr, // default security attributes
-    0, // default stack size
-    __libcpp_beginthreadex_thunk, __data,
-    0, // default creation flags
-    nullptr // output for thread ID
-  );
+  *__t = reinterpret_cast<HANDLE>(_beginthreadex(nullptr, 0,
+                                                 __libcpp_beginthreadex_thunk,
+                                                 __data, 0, nullptr));
+
   if (*__t)
     return 0;
   return GetLastError();




More information about the cfe-commits mailing list