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*);