Diff
Modified: trunk/Source/WebKit/ChangeLog (222683 => 222684)
--- trunk/Source/WebKit/ChangeLog 2017-09-30 21:25:50 UTC (rev 222683)
+++ trunk/Source/WebKit/ChangeLog 2017-09-30 22:50:16 UTC (rev 222684)
@@ -1,3 +1,39 @@
+2017-09-30 Darin Adler <[email protected]>
+
+ Have IPC::Connection::Client objects consistently invalidate the connection when destroyed
+ https://bugs.webkit.org/show_bug.cgi?id=177708
+
+ Reviewed by Anders Carlsson.
+
+ I ran into an intermittent crash when running regression tests. It looked like a connection
+ client was being called after it was destroyed. I did an audit of the all the connection
+ clients to make sure they all invalidate their connection before they are destroyed.
+
+ * NetworkProcess/NetworkConnectionToWebProcess.cpp:
+ (WebKit::NetworkConnectionToWebProcess::~NetworkConnectionToWebProcess): Invalidate the
+ connection since this object opened the connection. There is no obvious
+ guarantee that the connection will already be invalid when this is destroyed.
+ * StorageProcess/StorageToWebProcessConnection.cpp:
+ (WebKit::StorageToWebProcessConnection::~StorageToWebProcessConnection): Ditto.
+ * UIProcess/Plugins/PluginProcessProxy.cpp:
+ (WebKit::PluginProcessProxy::~PluginProcessProxy): Ditto.
+ * WebProcess/Network/NetworkProcessConnection.cpp:
+ (WebKit::NetworkProcessConnection::~NetworkProcessConnection): Ditto.
+ * WebProcess/Storage/WebToStorageProcessConnection.cpp:
+ (WebKit::WebToStorageProcessConnection::~WebToStorageProcessConnection): Ditto.
+
+ * StorageProcess/StorageToWebProcessConnection.h: Derive privately rather than publicly
+ from IPC::Connection::Client because we can, and this means we don't have to study quite
+ as much code to understand how this is used as a connection client.
+ * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h: Ditto.
+ * WebProcess/Storage/WebToStorageProcessConnection.h: Ditto.
+ * WebProcess/WebPage/WebInspector.h: Ditto.
+ * WebProcess/WebPage/WebInspectorUI.h: Ditto.
+
+ * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
+ (WebKit::WebIDBConnectionToServer::WebIDBConnectionToServer): Added a comment about a
+ reference cycle cycle leading to a leak that I believe exists here.
+
2017-09-29 Alex Christensen <[email protected]>
REGRESSION: ASSERTION FAILED: m_provisionalURL.isEmpty() in WebKit::FrameLoadState::didStartProvisionalLoad
Modified: trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp (222683 => 222684)
--- trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp 2017-09-30 21:25:50 UTC (rev 222683)
+++ trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp 2017-09-30 22:50:16 UTC (rev 222684)
@@ -77,6 +77,7 @@
NetworkConnectionToWebProcess::~NetworkConnectionToWebProcess()
{
+ m_connection->invalidate();
#if USE(LIBWEBRTC)
if (m_rtcProvider)
m_rtcProvider->close();
Modified: trunk/Source/WebKit/StorageProcess/StorageToWebProcessConnection.cpp (222683 => 222684)
--- trunk/Source/WebKit/StorageProcess/StorageToWebProcessConnection.cpp 2017-09-30 21:25:50 UTC (rev 222683)
+++ trunk/Source/WebKit/StorageProcess/StorageToWebProcessConnection.cpp 2017-09-30 22:50:16 UTC (rev 222684)
@@ -53,7 +53,7 @@
StorageToWebProcessConnection::~StorageToWebProcessConnection()
{
-
+ m_connection->invalidate();
}
void StorageToWebProcessConnection::didReceiveMessage(IPC::Connection& connection, IPC::Decoder& decoder)
Modified: trunk/Source/WebKit/StorageProcess/StorageToWebProcessConnection.h (222683 => 222684)
--- trunk/Source/WebKit/StorageProcess/StorageToWebProcessConnection.h 2017-09-30 21:25:50 UTC (rev 222683)
+++ trunk/Source/WebKit/StorageProcess/StorageToWebProcessConnection.h 2017-09-30 22:50:16 UTC (rev 222684)
@@ -37,7 +37,7 @@
class WebIDBConnectionToClient;
class WebSWServerConnection;
-class StorageToWebProcessConnection : public RefCounted<StorageToWebProcessConnection>, public IPC::Connection::Client, public IPC::MessageSender {
+class StorageToWebProcessConnection : public RefCounted<StorageToWebProcessConnection>, private IPC::Connection::Client, private IPC::MessageSender {
public:
static Ref<StorageToWebProcessConnection> create(IPC::Connection::Identifier);
~StorageToWebProcessConnection();
Modified: trunk/Source/WebKit/UIProcess/Plugins/PluginProcessProxy.cpp (222683 => 222684)
--- trunk/Source/WebKit/UIProcess/Plugins/PluginProcessProxy.cpp 2017-09-30 21:25:50 UTC (rev 222683)
+++ trunk/Source/WebKit/UIProcess/Plugins/PluginProcessProxy.cpp 2017-09-30 22:50:16 UTC (rev 222684)
@@ -80,6 +80,9 @@
PluginProcessProxy::~PluginProcessProxy()
{
+ if (m_connection)
+ m_connection->invalidate();
+
ASSERT(m_pendingFetchWebsiteDataRequests.isEmpty());
ASSERT(m_pendingFetchWebsiteDataCallbacks.isEmpty());
ASSERT(m_pendingDeleteWebsiteDataRequests.isEmpty());
Modified: trunk/Source/WebKit/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp (222683 => 222684)
--- trunk/Source/WebKit/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp 2017-09-30 21:25:50 UTC (rev 222683)
+++ trunk/Source/WebKit/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp 2017-09-30 22:50:16 UTC (rev 222684)
@@ -66,6 +66,8 @@
relaxAdoptionRequirement();
m_isOpenInServer = sendSync(Messages::StorageToWebProcessConnection::EstablishIDBConnectionToServer(sessionID), Messages::StorageToWebProcessConnection::EstablishIDBConnectionToServer::Reply(m_identifier));
+
+ // FIXME: This creates a reference cycle, so neither this object nor the IDBConnectionToServer will ever be deallocated.
m_connectionToServer = IDBClient::IDBConnectionToServer::create(*this);
}
Modified: trunk/Source/WebKit/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h (222683 => 222684)
--- trunk/Source/WebKit/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h 2017-09-30 21:25:50 UTC (rev 222683)
+++ trunk/Source/WebKit/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h 2017-09-30 22:50:16 UTC (rev 222684)
@@ -36,7 +36,7 @@
class WebIDBResult;
-class WebIDBConnectionToServer final : public WebCore::IDBClient::IDBConnectionToServerDelegate, public IPC::MessageSender, public RefCounted<WebIDBConnectionToServer> {
+class WebIDBConnectionToServer final : private WebCore::IDBClient::IDBConnectionToServerDelegate, private IPC::MessageSender, public RefCounted<WebIDBConnectionToServer> {
public:
static Ref<WebIDBConnectionToServer> create(PAL::SessionID);
Modified: trunk/Source/WebKit/WebProcess/Network/NetworkProcessConnection.cpp (222683 => 222684)
--- trunk/Source/WebKit/WebProcess/Network/NetworkProcessConnection.cpp 2017-09-30 21:25:50 UTC (rev 222683)
+++ trunk/Source/WebKit/WebProcess/Network/NetworkProcessConnection.cpp 2017-09-30 22:50:16 UTC (rev 222684)
@@ -59,6 +59,7 @@
NetworkProcessConnection::~NetworkProcessConnection()
{
+ m_connection->invalidate();
}
void NetworkProcessConnection::didReceiveMessage(IPC::Connection& connection, IPC::Decoder& decoder)
Modified: trunk/Source/WebKit/WebProcess/Storage/WebToStorageProcessConnection.cpp (222683 => 222684)
--- trunk/Source/WebKit/WebProcess/Storage/WebToStorageProcessConnection.cpp 2017-09-30 21:25:50 UTC (rev 222683)
+++ trunk/Source/WebKit/WebProcess/Storage/WebToStorageProcessConnection.cpp 2017-09-30 22:50:16 UTC (rev 222684)
@@ -46,6 +46,7 @@
WebToStorageProcessConnection::~WebToStorageProcessConnection()
{
+ m_connection->invalidate();
}
void WebToStorageProcessConnection::didReceiveMessage(IPC::Connection& connection, IPC::Decoder& decoder)
Modified: trunk/Source/WebKit/WebProcess/Storage/WebToStorageProcessConnection.h (222683 => 222684)
--- trunk/Source/WebKit/WebProcess/Storage/WebToStorageProcessConnection.h 2017-09-30 21:25:50 UTC (rev 222683)
+++ trunk/Source/WebKit/WebProcess/Storage/WebToStorageProcessConnection.h 2017-09-30 22:50:16 UTC (rev 222684)
@@ -40,7 +40,7 @@
namespace WebKit {
-class WebToStorageProcessConnection : public RefCounted<WebToStorageProcessConnection>, public IPC::Connection::Client, public IPC::MessageSender {
+class WebToStorageProcessConnection : public RefCounted<WebToStorageProcessConnection>, private IPC::Connection::Client, private IPC::MessageSender {
public:
static Ref<WebToStorageProcessConnection> create(IPC::Connection::Identifier connectionIdentifier)
{
Modified: trunk/Source/WebKit/WebProcess/WebPage/WebInspector.h (222683 => 222684)
--- trunk/Source/WebKit/WebProcess/WebPage/WebInspector.h 2017-09-30 21:25:50 UTC (rev 222683)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebInspector.h 2017-09-30 22:50:16 UTC (rev 222684)
@@ -36,7 +36,7 @@
class WebPage;
-class WebInspector : public API::ObjectImpl<API::Object::Type::BundleInspector>, public IPC::Connection::Client, public Inspector::FrontendChannel {
+class WebInspector : public API::ObjectImpl<API::Object::Type::BundleInspector>, private IPC::Connection::Client, public Inspector::FrontendChannel {
public:
static Ref<WebInspector> create(WebPage*);
Modified: trunk/Source/WebKit/WebProcess/WebPage/WebInspectorUI.h (222683 => 222684)
--- trunk/Source/WebKit/WebProcess/WebPage/WebInspectorUI.h 2017-09-30 21:25:50 UTC (rev 222683)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebInspectorUI.h 2017-09-30 22:50:16 UTC (rev 222684)
@@ -38,7 +38,7 @@
class WebPage;
-class WebInspectorUI : public RefCounted<WebInspectorUI>, public IPC::Connection::Client, public WebCore::InspectorFrontendClient {
+class WebInspectorUI : public RefCounted<WebInspectorUI>, private IPC::Connection::Client, public WebCore::InspectorFrontendClient {
public:
static Ref<WebInspectorUI> create(WebPage&);