Changeset 240974 in webkit


Ignore:
Timestamp:
Feb 5, 2019 7:38:20 AM (5 years ago)
Author:
achristensen@apple.com
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):

Location:
trunk/Source/WebKit
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r240973 r240974  
     12019-02-05  Alex Christensen  <achristensen@webkit.org>
     2
     3        Protect globalWebSocketStreamMap with a Lock
     4        https://bugs.webkit.org/show_bug.cgi?id=194224
     5        <rdar://problem/47581081>
     6
     7        Reviewed by Ryosuke Niwa.
     8
     9        * WebProcess/Network/WebSocketStream.cpp:
     10        (WebKit::WebSocketStream::streamWithIdentifier):
     11        (WebKit::WebSocketStream::networkProcessCrashed):
     12        (WebKit::WebSocketStream::WebSocketStream):
     13        (WebKit::WebSocketStream::~WebSocketStream):
     14
    1152019-02-04  Alex Christensen  <achristensen@webkit.org>
    216
  • trunk/Source/WebKit/WebProcess/Network/WebSocketStream.cpp

    r240955 r240974  
    4242using namespace WebCore;
    4343
     44static Lock globalWebSocketStreamMapLock;
    4445static HashMap<uint64_t, WebSocketStream*>& globalWebSocketStreamMap()
    4546{
     
    5051WebSocketStream* WebSocketStream::streamWithIdentifier(uint64_t identifier)
    5152{
     53    LockHolder locker(globalWebSocketStreamMapLock);
    5254    return globalWebSocketStreamMap().get(identifier);
    5355}
     
    5557void WebSocketStream::networkProcessCrashed()
    5658{
    57     for (auto& stream : globalWebSocketStreamMap().values()) {
     59    Vector<RefPtr<WebSocketStream>> sockets;
     60    {
     61        LockHolder locker(globalWebSocketStreamMapLock);
     62        sockets.reserveInitialCapacity(globalWebSocketStreamMap().size());
     63        for (auto& stream : globalWebSocketStreamMap().values())
     64            sockets.uncheckedAppend(stream);
     65    }
     66
     67    for (auto& stream : sockets) {
    5868        for (auto& callback : stream->m_sendDataCallbacks.values())
    5969            callback(false);
     
    6171            callback(false, false);
    6272        stream->m_client.didFailSocketStream(*stream, SocketStreamError(0, { }, "Network process crashed."));
     73        stream = nullptr;
    6374    }
    6475
     76    LockHolder locker(globalWebSocketStreamMapLock);
    6577    globalWebSocketStreamMap().clear();
    6678}
     
    7789    WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::CreateSocketStream(url, sessionID, cachePartition, identifier()), 0);
    7890
     91    LockHolder locker(globalWebSocketStreamMapLock);
    7992    ASSERT(!globalWebSocketStreamMap().contains(identifier()));
    8093    globalWebSocketStreamMap().set(identifier(), this);
     
    8396WebSocketStream::~WebSocketStream()
    8497{
     98    LockHolder locker(globalWebSocketStreamMapLock);
    8599    ASSERT(globalWebSocketStreamMap().contains(identifier()));
    86100    globalWebSocketStreamMap().remove(identifier());
Note: See TracChangeset for help on using the changeset viewer.