Title: [277844] trunk/Source/WebCore
Revision
277844
Author
[email protected]
Date
2021-05-20 18:56:59 -0700 (Thu, 20 May 2021)

Log Message

Add missing lock in AXIsolatedTree::treeForID()
https://bugs.webkit.org/show_bug.cgi?id=226060
<rdar://problem/78287227>

Reviewed by Alex Christensen.

Add missing lock in AXIsolatedTree::treeForID(). This was found via Clang Thread Safety
Analysis. This was the only call site that was failing to grab the s_cacheLock before
calling treeIDCache().

* accessibility/isolatedtree/AXIsolatedTree.cpp:
(WebCore::AXIsolatedTree::treeForID):
(WebCore::AXIsolatedTree::create):
(WebCore::AXIsolatedTree::removeTreeForPageID):
(WebCore::AXIsolatedTree::treeForPageID):
* accessibility/isolatedtree/AXIsolatedTree.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (277843 => 277844)


--- trunk/Source/WebCore/ChangeLog	2021-05-21 01:28:17 UTC (rev 277843)
+++ trunk/Source/WebCore/ChangeLog	2021-05-21 01:56:59 UTC (rev 277844)
@@ -1,3 +1,22 @@
+2021-05-20  Chris Dumez  <[email protected]>
+
+        Add missing lock in AXIsolatedTree::treeForID()
+        https://bugs.webkit.org/show_bug.cgi?id=226060
+        <rdar://problem/78287227>
+
+        Reviewed by Alex Christensen.
+
+        Add missing lock in AXIsolatedTree::treeForID(). This was found via Clang Thread Safety
+        Analysis. This was the only call site that was failing to grab the s_cacheLock before
+        calling treeIDCache().
+
+        * accessibility/isolatedtree/AXIsolatedTree.cpp:
+        (WebCore::AXIsolatedTree::treeForID):
+        (WebCore::AXIsolatedTree::create):
+        (WebCore::AXIsolatedTree::removeTreeForPageID):
+        (WebCore::AXIsolatedTree::treeForPageID):
+        * accessibility/isolatedtree/AXIsolatedTree.h:
+
 2021-05-20  Chris Lord  <[email protected]>
 
         [WPE] Spatial navigation tests fail with async overflow scrolling enabled

Modified: trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp (277843 => 277844)


--- trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp	2021-05-21 01:28:17 UTC (rev 277843)
+++ trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp	2021-05-21 01:56:59 UTC (rev 277844)
@@ -35,7 +35,7 @@
 
 namespace WebCore {
 
-static Lock s_cacheLock;
+CheckedLock AXIsolatedTree::s_cacheLock;
 
 static unsigned newTreeID()
 {
@@ -84,6 +84,7 @@
 RefPtr<AXIsolatedTree> AXIsolatedTree::treeForID(AXIsolatedTreeID treeID)
 {
     AXTRACE("AXIsolatedTree::treeForID");
+    Locker locker { s_cacheLock };
     return treeIDCache().get(treeID);
 }
 
@@ -107,7 +108,7 @@
     // Now that the tree is ready to take client requests, add it to the tree
     // maps so that it can be found.
     auto pageID = axObjectCache->pageID();
-    LockHolder locker(s_cacheLock);
+    Locker locker { s_cacheLock };
     ASSERT(!treePageCache().contains(*pageID));
     treePageCache().set(*pageID, tree.copyRef());
     treeIDCache().set(tree->treeID(), tree.copyRef());
@@ -119,7 +120,7 @@
 {
     AXTRACE("AXIsolatedTree::removeTreeForPageID");
     ASSERT(isMainThread());
-    LockHolder locker(s_cacheLock);
+    Locker locker { s_cacheLock };
 
     if (auto tree = treePageCache().take(pageID)) {
         tree->clear();
@@ -129,7 +130,7 @@
 
 RefPtr<AXIsolatedTree> AXIsolatedTree::treeForPageID(PageIdentifier pageID)
 {
-    LockHolder locker(s_cacheLock);
+    Locker locker { s_cacheLock };
 
     if (auto tree = treePageCache().get(pageID))
         return makeRefPtr(tree);

Modified: trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h (277843 => 277844)


--- trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h	2021-05-21 01:28:17 UTC (rev 277843)
+++ trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h	2021-05-21 01:56:59 UTC (rev 277844)
@@ -29,6 +29,7 @@
 
 #include "AccessibilityObjectInterface.h"
 #include "PageIdentifier.h"
+#include <wtf/CheckedLock.h>
 #include <wtf/HashMap.h>
 #include <wtf/RefPtr.h>
 #include <wtf/ThreadSafeRefCounted.h>
@@ -373,8 +374,9 @@
     AXIsolatedTree(AXObjectCache*);
     void clear();
 
-    static HashMap<AXIsolatedTreeID, Ref<AXIsolatedTree>>& treeIDCache();
-    static HashMap<PageIdentifier, Ref<AXIsolatedTree>>& treePageCache();
+    static CheckedLock s_cacheLock;
+    static HashMap<AXIsolatedTreeID, Ref<AXIsolatedTree>>& treeIDCache() WTF_REQUIRES_LOCK(s_cacheLock);
+    static HashMap<PageIdentifier, Ref<AXIsolatedTree>>& treePageCache() WTF_REQUIRES_LOCK(s_cacheLock);
 
     // Call on main thread
     Ref<AXIsolatedObject> createSubtree(AXCoreObject&, AXID parentID, bool attachWrapper);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to