Changeset 240974 in webkit
- Timestamp:
- Feb 5, 2019 7:38:20 AM (5 years ago)
- Location:
- trunk/Source/WebKit
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r240973 r240974 1 2019-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 1 15 2019-02-04 Alex Christensen <achristensen@webkit.org> 2 16 -
trunk/Source/WebKit/WebProcess/Network/WebSocketStream.cpp
r240955 r240974 42 42 using namespace WebCore; 43 43 44 static Lock globalWebSocketStreamMapLock; 44 45 static HashMap<uint64_t, WebSocketStream*>& globalWebSocketStreamMap() 45 46 { … … 50 51 WebSocketStream* WebSocketStream::streamWithIdentifier(uint64_t identifier) 51 52 { 53 LockHolder locker(globalWebSocketStreamMapLock); 52 54 return globalWebSocketStreamMap().get(identifier); 53 55 } … … 55 57 void WebSocketStream::networkProcessCrashed() 56 58 { 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) { 58 68 for (auto& callback : stream->m_sendDataCallbacks.values()) 59 69 callback(false); … … 61 71 callback(false, false); 62 72 stream->m_client.didFailSocketStream(*stream, SocketStreamError(0, { }, "Network process crashed.")); 73 stream = nullptr; 63 74 } 64 75 76 LockHolder locker(globalWebSocketStreamMapLock); 65 77 globalWebSocketStreamMap().clear(); 66 78 } … … 77 89 WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::CreateSocketStream(url, sessionID, cachePartition, identifier()), 0); 78 90 91 LockHolder locker(globalWebSocketStreamMapLock); 79 92 ASSERT(!globalWebSocketStreamMap().contains(identifier())); 80 93 globalWebSocketStreamMap().set(identifier(), this); … … 83 96 WebSocketStream::~WebSocketStream() 84 97 { 98 LockHolder locker(globalWebSocketStreamMapLock); 85 99 ASSERT(globalWebSocketStreamMap().contains(identifier())); 86 100 globalWebSocketStreamMap().remove(identifier());
Note: See TracChangeset
for help on using the changeset viewer.