WebKit Bugzilla
Attachment 361069 Details for
Bug 194224
: Protect globalWebSocketStreamMap with a Lock
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-194224-20190204101332.patch (text/plain), 3.14 KB, created by
Alex Christensen
on 2019-02-04 10:13:33 PST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Alex Christensen
Created:
2019-02-04 10:13:33 PST
Size:
3.14 KB
patch
obsolete
>Index: Source/WebKit/ChangeLog >=================================================================== >--- Source/WebKit/ChangeLog (revision 240928) >+++ Source/WebKit/ChangeLog (working copy) >@@ -1,3 +1,17 @@ >+2019-02-04 Alex Christensen <achristensen@webkit.org> >+ >+ Protect globalWebSocketStreamMap with a Lock >+ https://bugs.webkit.org/show_bug.cgi?id=194224 >+ <rdar://problem/47581081> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * WebProcess/Network/WebSocketStream.cpp: >+ (WebKit::WebSocketStream::streamWithIdentifier): >+ (WebKit::WebSocketStream::networkProcessCrashed): >+ (WebKit::WebSocketStream::WebSocketStream): >+ (WebKit::WebSocketStream::~WebSocketStream): >+ > 2019-02-04 Youenn Fablet <youenn@apple.com> > > Capture state should be managed consistently when doing process swapping >Index: Source/WebKit/WebProcess/Network/WebSocketStream.cpp >=================================================================== >--- Source/WebKit/WebProcess/Network/WebSocketStream.cpp (revision 240901) >+++ Source/WebKit/WebProcess/Network/WebSocketStream.cpp (working copy) >@@ -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 @@ static HashMap<uint64_t, WebSocketStream > > 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,12 +88,14 @@ WebSocketStream::WebSocketStream(const U > { > WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::CreateSocketStream(url, sessionID, cachePartition, identifier()), 0); > >+ LockHolder locker(globalWebSocketStreamMapLock); > ASSERT(!globalWebSocketStreamMap().contains(identifier())); > globalWebSocketStreamMap().set(identifier(), this); > } > > WebSocketStream::~WebSocketStream() > { >+ LockHolder locker(globalWebSocketStreamMapLock); > ASSERT(globalWebSocketStreamMap().contains(identifier())); > globalWebSocketStreamMap().remove(identifier()); > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Flags:
rniwa
:
review+
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 194224
: 361069