Title: [277877] trunk/Source
Revision
277877
Author
cdu...@apple.com
Date
2021-05-21 13:12:49 -0700 (Fri, 21 May 2021)

Log Message

Replace more static Locks with CheckedLocks in WebKit / WebKitLegacy
https://bugs.webkit.org/show_bug.cgi?id=226093

Reviewed by Darin Adler.

Replace more static Locks with CheckedLocks so that we can benefit from Clang Thread Safety Analysis.

Source/WebKit:

* NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
(WebKit::WebResourceLoadStatisticsStore::resourceLoadStatisticsUpdated):
(WebKit::WebResourceLoadStatisticsStore::suspend):
(WebKit::WebResourceLoadStatisticsStore::resume):
* NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
* Platform/IPC/Connection.cpp:
(IPC::WTF_REQUIRES_LOCK):
(IPC::addAsyncReplyHandler):
(IPC::clearAsyncReplyHandlers):
(IPC::CompletionHandler<void):
* WebProcess/Network/WebSocketStream.cpp:
(WebKit::WebSocketStream::streamWithIdentifier):
(WebKit::WebSocketStream::networkProcessCrashed):
(WebKit::WebSocketStream::WebSocketStream):
(WebKit::WebSocketStream::~WebSocketStream):

Source/WebKitLegacy/mac:

* DOM/DOMInternal.mm:
(getDOMWrapper):
(addDOMWrapper):
(removeDOMWrapper):

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (277876 => 277877)


--- trunk/Source/WebKit/ChangeLog	2021-05-21 19:47:15 UTC (rev 277876)
+++ trunk/Source/WebKit/ChangeLog	2021-05-21 20:12:49 UTC (rev 277877)
@@ -1,5 +1,30 @@
 2021-05-21  Chris Dumez  <cdu...@apple.com>
 
+        Replace more static Locks with CheckedLocks in WebKit / WebKitLegacy
+        https://bugs.webkit.org/show_bug.cgi?id=226093
+
+        Reviewed by Darin Adler.
+
+        Replace more static Locks with CheckedLocks so that we can benefit from Clang Thread Safety Analysis.
+
+        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
+        (WebKit::WebResourceLoadStatisticsStore::resourceLoadStatisticsUpdated):
+        (WebKit::WebResourceLoadStatisticsStore::suspend):
+        (WebKit::WebResourceLoadStatisticsStore::resume):
+        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
+        * Platform/IPC/Connection.cpp:
+        (IPC::WTF_REQUIRES_LOCK):
+        (IPC::addAsyncReplyHandler):
+        (IPC::clearAsyncReplyHandlers):
+        (IPC::CompletionHandler<void):
+        * WebProcess/Network/WebSocketStream.cpp:
+        (WebKit::WebSocketStream::streamWithIdentifier):
+        (WebKit::WebSocketStream::networkProcessCrashed):
+        (WebKit::WebSocketStream::WebSocketStream):
+        (WebKit::WebSocketStream::~WebSocketStream):
+
+2021-05-21  Chris Dumez  <cdu...@apple.com>
+
         Use CheckedLock more in cases where we try-lock
         https://bugs.webkit.org/show_bug.cgi?id=226056
 

Modified: trunk/Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp (277876 => 277877)


--- trunk/Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp	2021-05-21 19:47:15 UTC (rev 277876)
+++ trunk/Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp	2021-05-21 20:12:49 UTC (rev 277877)
@@ -60,8 +60,8 @@
 using namespace WebCore;
 
 WebResourceLoadStatisticsStore::State WebResourceLoadStatisticsStore::suspendedState { WebResourceLoadStatisticsStore::State::Running };
-Lock WebResourceLoadStatisticsStore::suspendedStateLock;
-Condition WebResourceLoadStatisticsStore::suspendedStateChangeCondition;
+CheckedLock WebResourceLoadStatisticsStore::suspendedStateLock;
+CheckedCondition WebResourceLoadStatisticsStore::suspendedStateChangeCondition;
 
 const OptionSet<WebsiteDataType>& WebResourceLoadStatisticsStore::monitoredDataTypes()
 {
@@ -349,7 +349,13 @@
             return;
         }
 
-        ASSERT(suspendedState != State::Suspended);
+#if ASSERT_ENABLED
+        {
+            Locker stateLocker { suspendedStateLock };
+            ASSERT(suspendedState != State::Suspended);
+        }
+#endif
+
         m_statisticsStore->mergeStatistics(WTFMove(statistics));
         postTaskReply(WTFMove(completionHandler));
         // We can cancel any pending request to process statistics since we're doing it synchronously below.
@@ -1444,7 +1450,7 @@
 void WebResourceLoadStatisticsStore::suspend(CompletionHandler<void()>&& completionHandler)
 {
     CompletionHandlerCallingScope completionHandlerCaller(WTFMove(completionHandler));
-    Locker<Lock> stateLocker(suspendedStateLock);
+    Locker stateLocker { suspendedStateLock };
     if (suspendedState != State::Running)
         return;
     suspendedState = State::WillSuspend;
@@ -1454,7 +1460,7 @@
         for (auto& databaseStore : ResourceLoadStatisticsDatabaseStore::allStores())
             databaseStore->interrupt();
         
-        Locker<Lock> stateLocker(suspendedStateLock);
+        Locker stateLocker { suspendedStateLock };
         ASSERT(suspendedState != State::Suspended);
 
         if (suspendedState != State::WillSuspend) {
@@ -1473,7 +1479,7 @@
 
 void WebResourceLoadStatisticsStore::resume()
 {
-    Locker<Lock> stateLocker(suspendedStateLock);
+    Locker stateLocker { suspendedStateLock };
     auto previousState = suspendedState;
     suspendedState = State::Running;
     if (previousState == State::Suspended)

Modified: trunk/Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h (277876 => 277877)


--- trunk/Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h	2021-05-21 19:47:15 UTC (rev 277876)
+++ trunk/Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h	2021-05-21 20:12:49 UTC (rev 277877)
@@ -40,6 +40,8 @@
 #include <WebCore/PrivateClickMeasurement.h>
 #include <WebCore/RegistrableDomain.h>
 #include <WebCore/ResourceLoadObserver.h>
+#include <wtf/CheckedCondition.h>
+#include <wtf/CheckedLock.h>
 #include <wtf/CompletionHandler.h>
 #include <wtf/RunLoop.h>
 #include <wtf/ThreadSafeRefCounted.h>
@@ -361,9 +363,9 @@
         WillSuspend,
         Suspended
     };
-    static State suspendedState;
-    static Lock suspendedStateLock;
-    static Condition suspendedStateChangeCondition;
+    static CheckedLock suspendedStateLock;
+    static State suspendedState WTF_GUARDED_BY_LOCK(suspendedStateLock);
+    static CheckedCondition suspendedStateChangeCondition;
 };
 
 } // namespace WebKit

Modified: trunk/Source/WebKit/Platform/IPC/Connection.cpp (277876 => 277877)


--- trunk/Source/WebKit/Platform/IPC/Connection.cpp	2021-05-21 19:47:15 UTC (rev 277876)
+++ trunk/Source/WebKit/Platform/IPC/Connection.cpp	2021-05-21 20:12:49 UTC (rev 277877)
@@ -274,15 +274,10 @@
     return map;
 }
 
-static Lock& asyncReplyHandlerMapLock()
+static CheckedLock asyncReplyHandlerMapLock;
+static HashMap<uintptr_t, HashMap<uint64_t, CompletionHandler<void(Decoder*)>>>& asyncReplyHandlerMap() WTF_REQUIRES_LOCK(asyncReplyHandlerMapLock)
 {
-    static Lock lock;
-    return lock;
-}
-
-static HashMap<uintptr_t, HashMap<uint64_t, CompletionHandler<void(Decoder*)>>>& asyncReplyHandlerMap(const LockHolder&)
-{
-    ASSERT(asyncReplyHandlerMapLock().isHeld());
+    ASSERT(asyncReplyHandlerMapLock.isHeld());
     static NeverDestroyed<HashMap<uintptr_t, HashMap<uint64_t, CompletionHandler<void(Decoder*)>>>> map;
     return map.get();
 }
@@ -1219,8 +1214,8 @@
 
 void addAsyncReplyHandler(Connection& connection, uint64_t identifier, CompletionHandler<void(Decoder*)>&& completionHandler)
 {
-    LockHolder locker(asyncReplyHandlerMapLock());
-    auto result = asyncReplyHandlerMap(locker).ensure(reinterpret_cast<uintptr_t>(&connection), [] {
+    Locker locker { asyncReplyHandlerMapLock };
+    auto result = asyncReplyHandlerMap().ensure(reinterpret_cast<uintptr_t>(&connection), [] {
         return HashMap<uint64_t, CompletionHandler<void(Decoder*)>>();
     }).iterator->value.add(identifier, WTFMove(completionHandler));
     ASSERT_UNUSED(result, result.isNewEntry);
@@ -1230,8 +1225,8 @@
 {
     HashMap<uint64_t, CompletionHandler<void(Decoder*)>> map;
     {
-        LockHolder locker(asyncReplyHandlerMapLock());
-        map = asyncReplyHandlerMap(locker).take(reinterpret_cast<uintptr_t>(&connection));
+        Locker locker { asyncReplyHandlerMapLock };
+        map = asyncReplyHandlerMap().take(reinterpret_cast<uintptr_t>(&connection));
     }
 
     for (auto& handler : map.values()) {
@@ -1242,8 +1237,8 @@
 
 CompletionHandler<void(Decoder*)> takeAsyncReplyHandler(Connection& connection, uint64_t identifier)
 {
-    LockHolder locker(asyncReplyHandlerMapLock());
-    auto& map = asyncReplyHandlerMap(locker);
+    Locker locker { asyncReplyHandlerMapLock };
+    auto& map = asyncReplyHandlerMap();
     auto iterator = map.find(reinterpret_cast<uintptr_t>(&connection));
     if (iterator != map.end()) {
         if (!iterator->value.isValidKey(identifier)) {

Modified: trunk/Source/WebKit/WebProcess/Network/WebSocketStream.cpp (277876 => 277877)


--- trunk/Source/WebKit/WebProcess/Network/WebSocketStream.cpp	2021-05-21 19:47:15 UTC (rev 277876)
+++ trunk/Source/WebKit/WebProcess/Network/WebSocketStream.cpp	2021-05-21 20:12:49 UTC (rev 277877)
@@ -34,13 +34,14 @@
 #include <WebCore/CookieRequestHeaderFieldProxy.h>
 #include <WebCore/SocketStreamError.h>
 #include <WebCore/SocketStreamHandleClient.h>
+#include <wtf/CheckedLock.h>
 #include <wtf/NeverDestroyed.h>
 
 namespace WebKit {
 using namespace WebCore;
 
-static Lock globalWebSocketStreamMapLock;
-static HashMap<WebSocketIdentifier, WebSocketStream*>& globalWebSocketStreamMap()
+static CheckedLock globalWebSocketStreamMapLock;
+static HashMap<WebSocketIdentifier, WebSocketStream*>& globalWebSocketStreamMap() WTF_REQUIRES_LOCK(globalWebSocketStreamMapLock)
 {
     static NeverDestroyed<HashMap<WebSocketIdentifier, WebSocketStream*>> globalMap;
     return globalMap;
@@ -48,7 +49,7 @@
 
 WebSocketStream* WebSocketStream::streamWithIdentifier(WebSocketIdentifier identifier)
 {
-    LockHolder locker(globalWebSocketStreamMapLock);
+    Locker stateLocker { globalWebSocketStreamMapLock };
     return globalWebSocketStreamMap().get(identifier);
 }
 
@@ -56,7 +57,7 @@
 {
     Vector<RefPtr<WebSocketStream>> sockets;
     {
-        LockHolder locker(globalWebSocketStreamMapLock);
+        Locker stateLocker { globalWebSocketStreamMapLock };
         sockets.reserveInitialCapacity(globalWebSocketStreamMap().size());
         for (auto& stream : globalWebSocketStreamMap().values())
             sockets.uncheckedAppend(stream);
@@ -71,7 +72,7 @@
         stream = nullptr;
     }
 
-    LockHolder locker(globalWebSocketStreamMapLock);
+    Locker stateLocker { globalWebSocketStreamMapLock };
     globalWebSocketStreamMap().clear();
 }
 
@@ -87,7 +88,7 @@
 {
     WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::CreateSocketStream(url, cachePartition, m_identifier), 0);
 
-    LockHolder locker(globalWebSocketStreamMapLock);
+    Locker stateLocker { globalWebSocketStreamMapLock };
     ASSERT(!globalWebSocketStreamMap().contains(m_identifier));
     globalWebSocketStreamMap().set(m_identifier, this);
 }
@@ -94,7 +95,7 @@
 
 WebSocketStream::~WebSocketStream()
 {
-    LockHolder locker(globalWebSocketStreamMapLock);
+    Locker stateLocker { globalWebSocketStreamMapLock };
     ASSERT(globalWebSocketStreamMap().contains(m_identifier));
     globalWebSocketStreamMap().remove(m_identifier);
 }

Modified: trunk/Source/WebKitLegacy/mac/ChangeLog (277876 => 277877)


--- trunk/Source/WebKitLegacy/mac/ChangeLog	2021-05-21 19:47:15 UTC (rev 277876)
+++ trunk/Source/WebKitLegacy/mac/ChangeLog	2021-05-21 20:12:49 UTC (rev 277877)
@@ -1,3 +1,17 @@
+2021-05-21  Chris Dumez  <cdu...@apple.com>
+
+        Replace more static Locks with CheckedLocks in WebKit / WebKitLegacy
+        https://bugs.webkit.org/show_bug.cgi?id=226093
+
+        Reviewed by Darin Adler.
+
+        Replace more static Locks with CheckedLocks so that we can benefit from Clang Thread Safety Analysis.
+
+        * DOM/DOMInternal.mm:
+        (getDOMWrapper):
+        (addDOMWrapper):
+        (removeDOMWrapper):
+
 2021-05-20  Alexey Shvayka  <shvaikal...@gmail.com>
 
         [WebIDL] Remove [ImplicitThis] and [CustomProxyToJSObject] extended attributes

Modified: trunk/Source/WebKitLegacy/mac/DOM/DOMInternal.mm (277876 => 277877)


--- trunk/Source/WebKitLegacy/mac/DOM/DOMInternal.mm	2021-05-21 19:47:15 UTC (rev 277876)
+++ trunk/Source/WebKitLegacy/mac/DOM/DOMInternal.mm	2021-05-21 20:12:49 UTC (rev 277877)
@@ -32,8 +32,8 @@
 #import <WebCore/ScriptController.h>
 #import <WebCore/WebScriptObjectPrivate.h>
 #import <WebCore/runtime_root.h>
+#import <wtf/CheckedLock.h>
 #import <wtf/HashMap.h>
-#import <wtf/Lock.h>
 #import <wtf/NeverDestroyed.h>
 
 #if PLATFORM(IOS_FAMILY)
@@ -44,10 +44,11 @@
 // Wrapping WebCore implementation objects
 
 #ifdef NEEDS_WRAPPER_CACHE_LOCK
-static Lock wrapperCacheLock;
+static CheckedLock wrapperCacheLock;
+static HashMap<DOMObjectInternal*, NSObject *>& wrapperCache() WTF_REQUIRES_LOCK(wrapperCacheLock)
+#else
+static HashMap<DOMObjectInternal*, NSObject *>& wrapperCache()
 #endif
-
-static HashMap<DOMObjectInternal*, NSObject *>& wrapperCache()
 {
     static NeverDestroyed<HashMap<DOMObjectInternal*, NSObject *>> map;
     return map;
@@ -56,7 +57,7 @@
 NSObject* getDOMWrapper(DOMObjectInternal* impl)
 {
 #ifdef NEEDS_WRAPPER_CACHE_LOCK
-    auto locker = holdLock(wrapperCacheLock);
+    Locker stateLocker { wrapperCacheLock };
 #endif
     return wrapperCache().get(impl);
 }
@@ -64,7 +65,7 @@
 void addDOMWrapper(NSObject* wrapper, DOMObjectInternal* impl)
 {
 #ifdef NEEDS_WRAPPER_CACHE_LOCK
-    auto locker = holdLock(wrapperCacheLock);
+    Locker stateLocker { wrapperCacheLock };
 #endif
     wrapperCache().set(impl, wrapper);
 }
@@ -72,7 +73,7 @@
 void removeDOMWrapper(DOMObjectInternal* impl)
 {
 #ifdef NEEDS_WRAPPER_CACHE_LOCK
-    auto locker = holdLock(wrapperCacheLock);
+    Locker stateLocker { wrapperCacheLock };
 #endif
     wrapperCache().remove(impl);
 }
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to