Title: [241085] branches/safari-607-branch/Source/WebKit
Revision
241085
Author
alanc...@apple.com
Date
2019-02-06 14:17:41 -0800 (Wed, 06 Feb 2019)

Log Message

Cherry-pick r240974. rdar://problem/47830620

    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-607-branch/Source/WebKit/ChangeLog (241084 => 241085)


--- branches/safari-607-branch/Source/WebKit/ChangeLog	2019-02-06 22:17:38 UTC (rev 241084)
+++ branches/safari-607-branch/Source/WebKit/ChangeLog	2019-02-06 22:17:41 UTC (rev 241085)
@@ -1,5 +1,39 @@
 2019-02-05  Alan Coon  <alanc...@apple.com>
 
+        Cherry-pick r240974. rdar://problem/47830620
+
+    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-05  Alan Coon  <alanc...@apple.com>
+
         Cherry-pick r240925. rdar://problem/47774545
 
     Unreviewed, avoid -Wswitch warnings introduced in r240880

Modified: branches/safari-607-branch/Source/WebKit/WebProcess/Network/WebSocketStream.cpp (241084 => 241085)


--- branches/safari-607-branch/Source/WebKit/WebProcess/Network/WebSocketStream.cpp	2019-02-06 22:17:38 UTC (rev 241084)
+++ branches/safari-607-branch/Source/WebKit/WebProcess/Network/WebSocketStream.cpp	2019-02-06 22:17:41 UTC (rev 241085)
@@ -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

Reply via email to