Quellcode durchsuchen

always enable thread-local storage

Julius Pfrommer vor 7 Jahren
Ursprung
Commit
c9645d59b2
1 geänderte Dateien mit 13 neuen und 11 gelöschten Zeilen
  1. 13 11
      src/ua_util.h

+ 13 - 11
src/ua_util.h

@@ -18,18 +18,20 @@
 #define container_of(ptr, type, member) \
     (type *)((uintptr_t)ptr - offsetof(type,member))
 
-/* Thread Local Storage */
-#ifdef UA_ENABLE_MULTITHREADING
-# if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
-#  define UA_THREAD_LOCAL _Thread_local /* C11 */
-# elif defined(__GNUC__)
-#  define UA_THREAD_LOCAL __thread /* GNU extension */
-# elif defined(_MSC_VER)
-#  define UA_THREAD_LOCAL __declspec(thread) /* MSVC extension */
-# else
-#  error The compiler does not support thread-local variables.
-# endif
+/* Thread-Local Storage
+ * --------------------
+ * Thread-local variables are always enabled. Also when the library is built
+ * with ``UA_ENABLE_MULTITHREADING`` disabled. Otherwise, if multiple clients
+ * run in separate threads, race conditions may occur via global variables in
+ * the encoding layer. */
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
+# define UA_THREAD_LOCAL _Thread_local /* C11 */
+#elif defined(__GNUC__)
+# define UA_THREAD_LOCAL __thread /* GNU extension */
+#elif defined(_MSC_VER)
+# define UA_THREAD_LOCAL __declspec(thread) /* MSVC extension */
 #else
+# warning The compiler does not support thread-local variables
 # define UA_THREAD_LOCAL
 #endif