Title: [277843] trunk/Source/WTF
Revision
277843
Author
[email protected]
Date
2021-05-20 18:28:17 -0700 (Thu, 20 May 2021)

Log Message

Add missing locks in Language.cpp
https://bugs.webkit.org/show_bug.cgi?id=226059

Reviewed by Alex Christensen.

Add missing locks in Language.cpp. This was found via Clang Thread Safety Analysis.
Some of the overrideUserPreferredLanguages() call sites were failing to grab the
lock first.

Also use NeverDestroyed in preferredLanguagesOverride() instead of LazyNeverDestroyed
with std::call_once. All call sites are already grabbing a lock so there is no need
for extra synchronization.

* wtf/Language.cpp:
(WTF::WTF_REQUIRES_LOCK):
(WTF::userPreferredLanguagesOverride):
(WTF::overrideUserPreferredLanguages):
(WTF::userPreferredLanguages):
(WTF::preferredLanguagesOverride): Deleted.

Modified Paths

Diff

Modified: trunk/Source/WTF/ChangeLog (277842 => 277843)


--- trunk/Source/WTF/ChangeLog	2021-05-21 00:40:47 UTC (rev 277842)
+++ trunk/Source/WTF/ChangeLog	2021-05-21 01:28:17 UTC (rev 277843)
@@ -1,3 +1,25 @@
+2021-05-20  Chris Dumez  <[email protected]>
+
+        Add missing locks in Language.cpp
+        https://bugs.webkit.org/show_bug.cgi?id=226059
+
+        Reviewed by Alex Christensen.
+
+        Add missing locks in Language.cpp. This was found via Clang Thread Safety Analysis.
+        Some of the overrideUserPreferredLanguages() call sites were failing to grab the
+        lock first.
+
+        Also use NeverDestroyed in preferredLanguagesOverride() instead of LazyNeverDestroyed
+        with std::call_once. All call sites are already grabbing a lock so there is no need
+        for extra synchronization.
+
+        * wtf/Language.cpp:
+        (WTF::WTF_REQUIRES_LOCK):
+        (WTF::userPreferredLanguagesOverride):
+        (WTF::overrideUserPreferredLanguages):
+        (WTF::userPreferredLanguages):
+        (WTF::preferredLanguagesOverride): Deleted.
+
 2021-05-19  Alex Christensen  <[email protected]>
 
         Add support for Navigation Timing Level 2

Modified: trunk/Source/WTF/wtf/Language.cpp (277842 => 277843)


--- trunk/Source/WTF/wtf/Language.cpp	2021-05-21 00:40:47 UTC (rev 277842)
+++ trunk/Source/WTF/wtf/Language.cpp	2021-05-21 01:28:17 UTC (rev 277843)
@@ -26,6 +26,7 @@
 #include "config.h"
 #include <wtf/Language.h>
 
+#include <wtf/CheckedLock.h>
 #include <wtf/HashMap.h>
 #include <wtf/NeverDestroyed.h>
 #include <wtf/text/WTFString.h>
@@ -36,7 +37,12 @@
 
 namespace WTF {
 
-static Lock userPreferredLanguagesMutex;
+static CheckedLock preferredLanguagesOverrideLock;
+static Vector<String>& preferredLanguagesOverride() WTF_REQUIRES_LOCK(preferredLanguagesOverrideLock)
+{
+    static NeverDestroyed<Vector<String>> override;
+    return override;
+}
 
 typedef HashMap<void*, LanguageChangeObserverFunction> ObserverMap;
 static ObserverMap& observerMap()
@@ -78,24 +84,18 @@
     return emptyString();
 }
 
-static Vector<String>& preferredLanguagesOverride()
-{
-    static LazyNeverDestroyed<Vector<String>> override;
-    static std::once_flag onceKey;
-    std::call_once(onceKey, [&] {
-        override.construct();
-    });
-    return override;
-}
-
 Vector<String> userPreferredLanguagesOverride()
 {
+    Locker locker { preferredLanguagesOverrideLock };
     return preferredLanguagesOverride();
 }
 
 void overrideUserPreferredLanguages(const Vector<String>& override)
 {
-    preferredLanguagesOverride() = override;
+    {
+        Locker locker { preferredLanguagesOverrideLock };
+        preferredLanguagesOverride() = override;
+    }
     languageDidChange();
 }
 
@@ -111,7 +111,7 @@
 Vector<String> userPreferredLanguages()
 {
     {
-        auto locker = holdLock(userPreferredLanguagesMutex);
+        Locker locker { preferredLanguagesOverrideLock };
         Vector<String>& override = preferredLanguagesOverride();
         if (!override.isEmpty())
             return isolatedCopy(override);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to