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