From 71bca736da244e7124854a11440b89a67cd42f3d Mon Sep 17 00:00:00 2001
From: Kelsey Gilbert <jdashg@gmail.com>
Date: Wed, 13 Sep 2023 21:50:14 +0000
Subject: [PATCH] Bug 1819497 - Don't race on static bool for initialization.
 r=gfx-reviewers,aosmond

We could do non-racy static init here (e.g. with a static initializer
self-calling-closure), but there doesn't seem to be a strong reason for
this. Let's just use a switch and get robustness from -Werror=switch.

Differential Revision: https://phabricator.services.mozilla.com/D188054
---
 dom/canvas/WebGLContextExtensions.cpp | 17 +++++++----------
 1 file changed, 7 insertions(+), 10 deletions(-)

diff --git a/dom/canvas/WebGLContextExtensions.cpp b/dom/canvas/WebGLContextExtensions.cpp
index 70548e62dc6b4..1a75ba827b578 100644
--- a/dom/canvas/WebGLContextExtensions.cpp
+++ b/dom/canvas/WebGLContextExtensions.cpp
@@ -17,15 +17,10 @@
 namespace mozilla {
 
 const char* GetExtensionName(const WebGLExtensionID ext) {
-  static EnumeratedArray<WebGLExtensionID, WebGLExtensionID::Max, const char*>
-      sExtensionNamesEnumeratedArray;
-  static bool initialized = false;
-
-  if (!initialized) {
-    initialized = true;
-
+  switch (ext) {
 #define WEBGL_EXTENSION_IDENTIFIER(x) \
-  sExtensionNamesEnumeratedArray[WebGLExtensionID::x] = #x;
+  case WebGLExtensionID::x:           \
+    return #x;
 
     WEBGL_EXTENSION_IDENTIFIER(ANGLE_instanced_arrays)
     WEBGL_EXTENSION_IDENTIFIER(EXT_blend_minmax)
@@ -67,9 +62,11 @@ const char* GetExtensionName(const WebGLExtensionID ext) {
     WEBGL_EXTENSION_IDENTIFIER(WEBGL_provoking_vertex)
 
 #undef WEBGL_EXTENSION_IDENTIFIER
-  }
 
-  return sExtensionNamesEnumeratedArray[ext];
+    case WebGLExtensionID::Max:
+      break;
+  }
+  MOZ_CRASH("bad WebGLExtensionID");
 }
 
 // ----------------------------
-- 
GitLab