Skip to content

Commit

Permalink
NetworkRTCProvider::doSocketTaskOnRTCNetworkThread should protect iself
Browse files Browse the repository at this point in the history
https://bugs.webkit.org/show_bug.cgi?id=261200
rdar://112521277

Reviewed by Eric Carlson.

Make sure to ref NetworkRTCProvider before hopping to another thread.
We mark NetworkRTCProvider as DestructionThread::MainRunLoop to ensure it gets destroyed in main run loop.

* Source/WebKit/NetworkProcess/webrtc/NetworkRTCProvider.cpp:
(WebKit::NetworkRTCProvider::createClientTCPSocket):
(WebKit::NetworkRTCProvider::doSocketTaskOnRTCNetworkThread):
* Source/WebKit/NetworkProcess/webrtc/NetworkRTCProvider.h:

Originally-landed-as: 5dd0bac. rdar://117810497
Canonical link: https://commits.webkit.org/270543@main
  • Loading branch information
youennf authored and robert-jenner committed Nov 10, 2023
1 parent ecb40fd commit ac0c2a6
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 3 deletions.
4 changes: 2 additions & 2 deletions Source/WebKit/NetworkProcess/webrtc/NetworkRTCProvider.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@ void NetworkRTCProvider::createClientTCPSocket(LibWebRTCSocketIdentifier identif
signalSocketIsClosed(identifier);
return;
}
callOnRTCNetworkThread([this, identifier, localAddress = RTC::Network::SocketAddress::isolatedCopy(localAddress.rtcAddress()), remoteAddress = RTC::Network::SocketAddress::isolatedCopy(remoteAddress.rtcAddress()), proxyInfo = proxyInfoFromSession(remoteAddress, *session), userAgent = WTFMove(userAgent).isolatedCopy(), options]() mutable {
callOnRTCNetworkThread([this, protectedThis = Ref { *this }, identifier, localAddress = RTC::Network::SocketAddress::isolatedCopy(localAddress.rtcAddress()), remoteAddress = RTC::Network::SocketAddress::isolatedCopy(remoteAddress.rtcAddress()), proxyInfo = proxyInfoFromSession(remoteAddress, *session), userAgent = WTFMove(userAgent).isolatedCopy(), options]() mutable {

rtc::PacketSocketTcpOptions tcpOptions;
tcpOptions.opts = options;
Expand Down Expand Up @@ -247,7 +247,7 @@ void NetworkRTCProvider::closeSocket(LibWebRTCSocketIdentifier identifier)

void NetworkRTCProvider::doSocketTaskOnRTCNetworkThread(LibWebRTCSocketIdentifier identifier, Function<void(Socket&)>&& callback)
{
callOnRTCNetworkThread([this, identifier, callback = WTFMove(callback)]() mutable {
callOnRTCNetworkThread([this, protectedThis = Ref { *this }, identifier, callback = WTFMove(callback)]() mutable {
auto iterator = m_sockets.find(identifier);
if (iterator == m_sockets.end())
return;
Expand Down
2 changes: 1 addition & 1 deletion Source/WebKit/NetworkProcess/webrtc/NetworkRTCProvider.h
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ struct SocketComparator {
}
};

class NetworkRTCProvider : private FunctionDispatcher, private IPC::MessageReceiver, public ThreadSafeRefCounted<NetworkRTCProvider> {
class NetworkRTCProvider : private FunctionDispatcher, private IPC::MessageReceiver, public ThreadSafeRefCounted<NetworkRTCProvider, WTF::DestructionThread::MainRunLoop> {
public:
static Ref<NetworkRTCProvider> create(NetworkConnectionToWebProcess& connection)
{
Expand Down

0 comments on commit ac0c2a6

Please sign in to comment.