Title: [240974] trunk/Source/WebKit
- Revision
- 240974
- Author
- [email protected]
- Date
- 2019-02-05 07:38:20 -0800 (Tue, 05 Feb 2019)
Log Message
Protect globalWebSocketStreamMap with a Lock
https://bugs.webkit.org/show_bug.cgi?id=194224
<rdar://problem/47581081>
Reviewed by Ryosuke Niwa.
* WebProcess/Network/WebSocketStream.cpp:
(WebKit::WebSocketStream::streamWithIdentifier):
(WebKit::WebSocketStream::networkProcessCrashed):
(WebKit::WebSocketStream::WebSocketStream):
(WebKit::WebSocketStream::~WebSocketStream):
Modified Paths
Diff
Modified: trunk/Source/WebKit/ChangeLog (240973 => 240974)
--- trunk/Source/WebKit/ChangeLog 2019-02-05 15:36:02 UTC (rev 240973)
+++ trunk/Source/WebKit/ChangeLog 2019-02-05 15:38:20 UTC (rev 240974)
@@ -1,3 +1,17 @@
+2019-02-05 Alex Christensen <[email protected]>
+
+ Protect globalWebSocketStreamMap with a Lock
+ https://bugs.webkit.org/show_bug.cgi?id=194224
+ <rdar://problem/47581081>
+
+ Reviewed by Ryosuke Niwa.
+
+ * WebProcess/Network/WebSocketStream.cpp:
+ (WebKit::WebSocketStream::streamWithIdentifier):
+ (WebKit::WebSocketStream::networkProcessCrashed):
+ (WebKit::WebSocketStream::WebSocketStream):
+ (WebKit::WebSocketStream::~WebSocketStream):
+
2019-02-04 Alex Christensen <[email protected]>
Add Networking Daemon skeleton
Modified: trunk/Source/WebKit/WebProcess/Network/WebSocketStream.cpp (240973 => 240974)
--- trunk/Source/WebKit/WebProcess/Network/WebSocketStream.cpp 2019-02-05 15:36:02 UTC (rev 240973)
+++ trunk/Source/WebKit/WebProcess/Network/WebSocketStream.cpp 2019-02-05 15:38:20 UTC (rev 240974)
@@ -41,6 +41,7 @@
namespace WebKit {
using namespace WebCore;
+static Lock globalWebSocketStreamMapLock;
static HashMap<uint64_t, WebSocketStream*>& globalWebSocketStreamMap()
{
static NeverDestroyed<HashMap<uint64_t, WebSocketStream*>> globalMap;
@@ -49,19 +50,30 @@
WebSocketStream* WebSocketStream::streamWithIdentifier(uint64_t identifier)
{
+ LockHolder locker(globalWebSocketStreamMapLock);
return globalWebSocketStreamMap().get(identifier);
}
void WebSocketStream::networkProcessCrashed()
{
- for (auto& stream : globalWebSocketStreamMap().values()) {
+ Vector<RefPtr<WebSocketStream>> sockets;
+ {
+ LockHolder locker(globalWebSocketStreamMapLock);
+ sockets.reserveInitialCapacity(globalWebSocketStreamMap().size());
+ for (auto& stream : globalWebSocketStreamMap().values())
+ sockets.uncheckedAppend(stream);
+ }
+
+ for (auto& stream : sockets) {
for (auto& callback : stream->m_sendDataCallbacks.values())
callback(false);
for (auto& callback : stream->m_sendHandshakeCallbacks.values())
callback(false, false);
stream->m_client.didFailSocketStream(*stream, SocketStreamError(0, { }, "Network process crashed."));
+ stream = nullptr;
}
+ LockHolder locker(globalWebSocketStreamMapLock);
globalWebSocketStreamMap().clear();
}
@@ -76,6 +88,7 @@
{
WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::CreateSocketStream(url, sessionID, cachePartition, identifier()), 0);
+ LockHolder locker(globalWebSocketStreamMapLock);
ASSERT(!globalWebSocketStreamMap().contains(identifier()));
globalWebSocketStreamMap().set(identifier(), this);
}
@@ -82,6 +95,7 @@
WebSocketStream::~WebSocketStream()
{
+ LockHolder locker(globalWebSocketStreamMapLock);
ASSERT(globalWebSocketStreamMap().contains(identifier()));
globalWebSocketStreamMap().remove(identifier());
}
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes