Module: Mesa
Branch: master
Commit: a84fd58f48fa332b1c5a545d9b7e2440b8784656
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=a84fd58f48fa332b1c5a545d9b7e2440b8784656

Author: Marek Olšák <[email protected]>
Date:   Wed Sep  5 19:15:56 2018 -0400

gallium/u_cpu_detect: fix a race condition on initialization

Reviewed-by: Brian Paul <[email protected]>

---

 src/gallium/auxiliary/util/u_cpu_detect.c | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/src/gallium/auxiliary/util/u_cpu_detect.c 
b/src/gallium/auxiliary/util/u_cpu_detect.c
index 14003aa769..93cf58011d 100644
--- a/src/gallium/auxiliary/util/u_cpu_detect.c
+++ b/src/gallium/auxiliary/util/u_cpu_detect.c
@@ -36,6 +36,7 @@
 
 #include "u_debug.h"
 #include "u_cpu_detect.h"
+#include "c11/threads.h"
 
 #if defined(PIPE_ARCH_PPC)
 #if defined(PIPE_OS_APPLE)
@@ -366,14 +367,9 @@ check_os_arm_support(void)
 }
 #endif /* PIPE_ARCH_ARM */
 
-void
-util_cpu_detect(void)
+static void
+util_cpu_detect_once(void)
 {
-   static boolean util_cpu_detect_initialized = FALSE;
-
-   if(util_cpu_detect_initialized)
-      return;
-
    memset(&util_cpu_caps, 0, sizeof util_cpu_caps);
 
    /* Count the number of CPUs in system */
@@ -561,6 +557,12 @@ util_cpu_detect(void)
       debug_printf("util_cpu_caps.has_avx512vbmi = %u\n", 
util_cpu_caps.has_avx512vbmi);
    }
 #endif
+}
+
+static once_flag cpu_once_flag = ONCE_FLAG_INIT;
 
-   util_cpu_detect_initialized = TRUE;
+void
+util_cpu_detect(void)
+{
+   call_once(&cpu_once_flag, util_cpu_detect_once);
 }

_______________________________________________
mesa-commit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to