Title: [241342] branches/safari-608.1.5.1-branch/Source/WebKit
- Revision
- 241342
- Author
- bshaf...@apple.com
- Date
- 2019-02-12 22:35:55 -0800 (Tue, 12 Feb 2019)
Log Message
Cherry-pick r240974. rdar://problem/47581081
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):
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240974 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Modified Paths
Diff
Modified: branches/safari-608.1.5.1-branch/Source/WebKit/ChangeLog (241341 => 241342)
--- branches/safari-608.1.5.1-branch/Source/WebKit/ChangeLog 2019-02-13 06:35:51 UTC (rev 241341)
+++ branches/safari-608.1.5.1-branch/Source/WebKit/ChangeLog 2019-02-13 06:35:55 UTC (rev 241342)
@@ -1,3 +1,37 @@
+2019-02-12 Babak Shafiei <bshaf...@apple.com>
+
+ Cherry-pick r240974. rdar://problem/47581081
+
+ 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):
+
+
+
+ git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240974 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+ 2019-02-05 Alex Christensen <achristen...@webkit.org>
+
+ 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-07 Kocsen Chung <kocsen_ch...@apple.com>
Cherry-pick r241113. rdar://problem/47805607
Modified: branches/safari-608.1.5.1-branch/Source/WebKit/WebProcess/Network/WebSocketStream.cpp (241341 => 241342)
--- branches/safari-608.1.5.1-branch/Source/WebKit/WebProcess/Network/WebSocketStream.cpp 2019-02-13 06:35:51 UTC (rev 241341)
+++ branches/safari-608.1.5.1-branch/Source/WebKit/WebProcess/Network/WebSocketStream.cpp 2019-02-13 06:35:55 UTC (rev 241342)
@@ -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
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes