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);
}