Title: [218441] trunk/Source/WebKit2
Revision
218441
Author
[email protected]
Date
2017-06-16 20:42:34 -0700 (Fri, 16 Jun 2017)

Log Message

[WebRTC] CrashTracer: Regression : com.apple.WebKit.Networking at WebKit: WebKit::LibWebRTCSocketClient::sendTo
https://bugs.webkit.org/show_bug.cgi?id=173501

Patch by Youenn Fablet <[email protected]> on 2017-06-16
Reviewed by Eric Carlson.

When a libwebrtc socket fails to be created in the network process,
the network process sends back a close message, but it keeps it in a map.
If the web process sends a message dedicated to this socket, we will try
processing it and calling the socket which is null, hence the cache.
This patch makes it so that if the socket is null, it is not added to the map.

* NetworkProcess/webrtc/LibWebRTCSocketClient.cpp:
(WebKit::LibWebRTCSocketClient::LibWebRTCSocketClient):
* NetworkProcess/webrtc/NetworkRTCProvider.cpp:
(WebKit::NetworkRTCProvider::createSocket):
(WebKit::NetworkRTCProvider::createUDPSocket):
(WebKit::NetworkRTCProvider::createServerTCPSocket):
(WebKit::NetworkRTCProvider::createClientTCPSocket):
* NetworkProcess/webrtc/NetworkRTCProvider.h:

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (218440 => 218441)


--- trunk/Source/WebKit2/ChangeLog	2017-06-17 02:58:24 UTC (rev 218440)
+++ trunk/Source/WebKit2/ChangeLog	2017-06-17 03:42:34 UTC (rev 218441)
@@ -1,3 +1,25 @@
+2017-06-16  Youenn Fablet  <[email protected]>
+
+        [WebRTC] CrashTracer: Regression : com.apple.WebKit.Networking at WebKit: WebKit::LibWebRTCSocketClient::sendTo
+        https://bugs.webkit.org/show_bug.cgi?id=173501
+
+        Reviewed by Eric Carlson.
+
+        When a libwebrtc socket fails to be created in the network process,
+        the network process sends back a close message, but it keeps it in a map.
+        If the web process sends a message dedicated to this socket, we will try
+        processing it and calling the socket which is null, hence the cache.
+        This patch makes it so that if the socket is null, it is not added to the map.
+
+        * NetworkProcess/webrtc/LibWebRTCSocketClient.cpp:
+        (WebKit::LibWebRTCSocketClient::LibWebRTCSocketClient):
+        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
+        (WebKit::NetworkRTCProvider::createSocket):
+        (WebKit::NetworkRTCProvider::createUDPSocket):
+        (WebKit::NetworkRTCProvider::createServerTCPSocket):
+        (WebKit::NetworkRTCProvider::createClientTCPSocket):
+        * NetworkProcess/webrtc/NetworkRTCProvider.h:
+
 2017-06-16  Antoine Quint  <[email protected]>
 
         Add a WebKit2 setting to control whether media documents should automatically enter fullscreen

Modified: trunk/Source/WebKit2/NetworkProcess/webrtc/LibWebRTCSocketClient.cpp (218440 => 218441)


--- trunk/Source/WebKit2/NetworkProcess/webrtc/LibWebRTCSocketClient.cpp	2017-06-17 02:58:24 UTC (rev 218440)
+++ trunk/Source/WebKit2/NetworkProcess/webrtc/LibWebRTCSocketClient.cpp	2017-06-17 03:42:34 UTC (rev 218441)
@@ -42,12 +42,7 @@
     , m_rtcProvider(rtcProvider)
     , m_socket(WTFMove(socket))
 {
-    if (!m_socket) {
-        rtcProvider.sendFromMainThread([identifier](IPC::Connection& connection) {
-            connection.send(Messages::WebRTCSocket::SignalClose(1), identifier);
-        });
-        return;
-    }
+    ASSERT(m_socket);
 
     m_socket->SignalReadPacket.connect(this, &LibWebRTCSocketClient::signalReadPacket);
     m_socket->SignalSentPacket.connect(this, &LibWebRTCSocketClient::signalSentPacket);

Modified: trunk/Source/WebKit2/NetworkProcess/webrtc/NetworkRTCProvider.cpp (218440 => 218441)


--- trunk/Source/WebKit2/NetworkProcess/webrtc/NetworkRTCProvider.cpp	2017-06-17 02:58:24 UTC (rev 218440)
+++ trunk/Source/WebKit2/NetworkProcess/webrtc/NetworkRTCProvider.cpp	2017-06-17 03:42:34 UTC (rev 218441)
@@ -88,11 +88,22 @@
     });
 }
 
+void NetworkRTCProvider::createSocket(uint64_t identifier, std::unique_ptr<rtc::AsyncPacketSocket>&& socket, LibWebRTCSocketClient::Type type)
+{
+    if (!socket) {
+        sendFromMainThread([identifier](IPC::Connection& connection) {
+            connection.send(Messages::WebRTCSocket::SignalClose(1), identifier);
+        });
+        return;
+    }
+    addSocket(identifier, std::make_unique<LibWebRTCSocketClient>(identifier, *this, WTFMove(socket), type));
+}
+
 void NetworkRTCProvider::createUDPSocket(uint64_t identifier, const RTCNetwork::SocketAddress& address, uint16_t minPort, uint16_t maxPort)
 {
     callOnRTCNetworkThread([this, identifier, address = RTCNetwork::isolatedCopy(address.value), minPort, maxPort]() {
         std::unique_ptr<rtc::AsyncPacketSocket> socket(m_packetSocketFactory->CreateUdpSocket(address, minPort, maxPort));
-        addSocket(identifier, std::make_unique<LibWebRTCSocketClient>(identifier, *this, WTFMove(socket), LibWebRTCSocketClient::Type::UDP));
+        createSocket(identifier, WTFMove(socket), LibWebRTCSocketClient::Type::UDP);
     });
 }
 
@@ -100,7 +111,7 @@
 {
     callOnRTCNetworkThread([this, identifier, address = RTCNetwork::isolatedCopy(address.value), minPort, maxPort, options]() {
         std::unique_ptr<rtc::AsyncPacketSocket> socket(m_packetSocketFactory->CreateServerTcpSocket(address, minPort, maxPort, options));
-        addSocket(identifier, std::make_unique<LibWebRTCSocketClient>(identifier, *this, WTFMove(socket), LibWebRTCSocketClient::Type::ServerTCP));
+        createSocket(identifier, WTFMove(socket), LibWebRTCSocketClient::Type::ServerTCP);
     });
 }
 
@@ -108,7 +119,7 @@
 {
     callOnRTCNetworkThread([this, identifier, localAddress = RTCNetwork::isolatedCopy(localAddress.value), remoteAddress = RTCNetwork::isolatedCopy(remoteAddress.value), options]() {
         std::unique_ptr<rtc::AsyncPacketSocket> socket(m_packetSocketFactory->CreateClientTcpSocket(localAddress, remoteAddress, { }, { }, options));
-        addSocket(identifier, std::make_unique<LibWebRTCSocketClient>(identifier, *this, WTFMove(socket), LibWebRTCSocketClient::Type::ClientTCP));
+        createSocket(identifier, WTFMove(socket), LibWebRTCSocketClient::Type::ClientTCP);
     });
 }
 

Modified: trunk/Source/WebKit2/NetworkProcess/webrtc/NetworkRTCProvider.h (218440 => 218441)


--- trunk/Source/WebKit2/NetworkProcess/webrtc/NetworkRTCProvider.h	2017-06-17 02:58:24 UTC (rev 218440)
+++ trunk/Source/WebKit2/NetworkProcess/webrtc/NetworkRTCProvider.h	2017-06-17 03:42:34 UTC (rev 218441)
@@ -82,6 +82,8 @@
 
     void addSocket(uint64_t, std::unique_ptr<LibWebRTCSocketClient>&&);
 
+    void createSocket(uint64_t identifier, std::unique_ptr<rtc::AsyncPacketSocket>&&, LibWebRTCSocketClient::Type);
+
     void OnMessage(rtc::Message*);
 
     static void resolvedName(CFHostRef, CFHostInfoType, const CFStreamError*, void*);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to