Title: [240931] trunk/Source
Revision
240931
Author
[email protected]
Date
2019-02-04 10:51:19 -0800 (Mon, 04 Feb 2019)

Log Message

IndexedDB: leak WebIDBConnectionToServer in layout tests
https://bugs.webkit.org/show_bug.cgi?id=193688
<rdar://problem/47353263>

Reviewed by Geoffrey Garen.

Source/WebCore:

Let IDBConnectionToServer keep a WeakPtr of IDBConnectionToServerDelegate.

* Modules/indexeddb/client/IDBConnectionToServer.cpp:
(WebCore::IDBClient::IDBConnectionToServer::IDBConnectionToServer):
* Modules/indexeddb/client/IDBConnectionToServer.h:
* Modules/indexeddb/client/IDBConnectionToServerDelegate.h:

Source/WebKit:

* NetworkProcess/NetworkConnectionToWebProcess.cpp:
(WebKit::NetworkConnectionToWebProcess::didClose):
(WebKit::NetworkConnectionToWebProcess::establishIDBConnectionToServer):
(WebKit::NetworkConnectionToWebProcess::removeIDBConnectionToServer): Deleted.
* NetworkProcess/NetworkConnectionToWebProcess.h:
* NetworkProcess/NetworkConnectionToWebProcess.messages.in:
* WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
(WebKit::WebIDBConnectionToServer::~WebIDBConnectionToServer):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (240930 => 240931)


--- trunk/Source/WebCore/ChangeLog	2019-02-04 18:47:23 UTC (rev 240930)
+++ trunk/Source/WebCore/ChangeLog	2019-02-04 18:51:19 UTC (rev 240931)
@@ -1,3 +1,18 @@
+2019-02-04  Sihui Liu  <[email protected]>
+
+        IndexedDB: leak WebIDBConnectionToServer in layout tests
+        https://bugs.webkit.org/show_bug.cgi?id=193688
+        <rdar://problem/47353263>
+
+        Reviewed by Geoffrey Garen.
+
+        Let IDBConnectionToServer keep a WeakPtr of IDBConnectionToServerDelegate.
+
+        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
+        (WebCore::IDBClient::IDBConnectionToServer::IDBConnectionToServer):
+        * Modules/indexeddb/client/IDBConnectionToServer.h:
+        * Modules/indexeddb/client/IDBConnectionToServerDelegate.h:
+
 2019-02-04  Youenn Fablet  <[email protected]>
 
         Make sure to remove the device observer in AVVideoCaptureSource

Modified: trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.cpp (240930 => 240931)


--- trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.cpp	2019-02-04 18:47:23 UTC (rev 240930)
+++ trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.cpp	2019-02-04 18:51:19 UTC (rev 240931)
@@ -48,7 +48,7 @@
 }
 
 IDBConnectionToServer::IDBConnectionToServer(IDBConnectionToServerDelegate& delegate)
-    : m_delegate(delegate)
+    : m_delegate(makeWeakPtr(delegate))
     , m_proxy(std::make_unique<IDBConnectionProxy>(*this))
 {
 }

Modified: trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.h (240930 => 240931)


--- trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.h	2019-02-04 18:47:23 UTC (rev 240930)
+++ trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.h	2019-02-04 18:51:19 UTC (rev 240931)
@@ -146,7 +146,7 @@
     typedef void (IDBConnectionToServer::*ResultFunction)(const IDBResultData&);
     void callResultFunctionWithErrorLater(ResultFunction, const IDBResourceIdentifier& requestIdentifier);
     
-    Ref<IDBConnectionToServerDelegate> m_delegate;
+    WeakPtr<IDBConnectionToServerDelegate> m_delegate;
     bool m_serverConnectionIsValid { true };
 
     HashMap<uint64_t, WTF::Function<void (const Vector<String>&)>> m_getAllDatabaseNamesCallbacks;

Modified: trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServerDelegate.h (240930 => 240931)


--- trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServerDelegate.h	2019-02-04 18:47:23 UTC (rev 240930)
+++ trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServerDelegate.h	2019-02-04 18:51:19 UTC (rev 240931)
@@ -27,6 +27,7 @@
 
 #if ENABLE(INDEXED_DATABASE)
 
+#include <wtf/WeakPtr.h>
 #include <wtf/text/WTFString.h>
 
 namespace WebCore {
@@ -53,7 +54,7 @@
 
 namespace IDBClient {
 
-class IDBConnectionToServerDelegate {
+class IDBConnectionToServerDelegate : public CanMakeWeakPtr<IDBConnectionToServerDelegate> {
 public:
     virtual ~IDBConnectionToServerDelegate() = default;
 

Modified: trunk/Source/WebKit/ChangeLog (240930 => 240931)


--- trunk/Source/WebKit/ChangeLog	2019-02-04 18:47:23 UTC (rev 240930)
+++ trunk/Source/WebKit/ChangeLog	2019-02-04 18:51:19 UTC (rev 240931)
@@ -1,3 +1,20 @@
+2019-02-04  Sihui Liu  <[email protected]>
+
+        IndexedDB: leak WebIDBConnectionToServer in layout tests
+        https://bugs.webkit.org/show_bug.cgi?id=193688
+        <rdar://problem/47353263>
+
+        Reviewed by Geoffrey Garen.
+
+        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
+        (WebKit::NetworkConnectionToWebProcess::didClose):
+        (WebKit::NetworkConnectionToWebProcess::establishIDBConnectionToServer):
+        (WebKit::NetworkConnectionToWebProcess::removeIDBConnectionToServer): Deleted.
+        * NetworkProcess/NetworkConnectionToWebProcess.h:
+        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
+        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
+        (WebKit::WebIDBConnectionToServer::~WebIDBConnectionToServer):
+
 2019-02-04  Antoine Quint  <[email protected]>
 
         <rdar://problem/47788802>

Modified: trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp (240930 => 240931)


--- trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp	2019-02-04 18:47:23 UTC (rev 240930)
+++ trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp	2019-02-04 18:51:19 UTC (rev 240931)
@@ -263,7 +263,7 @@
     auto idbConnections = m_webIDBConnections;
     for (auto& connection : idbConnections.values())
         connection->disconnectedFromWebProcess();
-    
+
     m_webIDBConnections.clear();
 #endif
     
@@ -753,14 +753,6 @@
     
     m_webIDBConnections.set(serverConnectionIdentifier, WebIDBConnectionToClient::create(m_networkProcess, m_connection.get(), serverConnectionIdentifier, sessionID));
 }
-
-void NetworkConnectionToWebProcess::removeIDBConnectionToServer(uint64_t serverConnectionIdentifier)
-{
-    ASSERT(m_webIDBConnections.contains(serverConnectionIdentifier));
-    
-    auto connection = m_webIDBConnections.take(serverConnectionIdentifier);
-    connection->disconnectedFromWebProcess();
-}
 #endif
     
 #if ENABLE(SERVICE_WORKER)

Modified: trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h (240930 => 240931)


--- trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h	2019-02-04 18:47:23 UTC (rev 240930)
+++ trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h	2019-02-04 18:51:19 UTC (rev 240931)
@@ -175,7 +175,6 @@
 #if ENABLE(INDEXED_DATABASE)
     // Messages handlers (Modern IDB).
     void establishIDBConnectionToServer(PAL::SessionID, uint64_t& serverConnectionIdentifier);
-    void removeIDBConnectionToServer(uint64_t serverConnectionIdentifier);
 #endif
 
 #if ENABLE(SERVICE_WORKER)

Modified: trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in (240930 => 240931)


--- trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in	2019-02-04 18:47:23 UTC (rev 240930)
+++ trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in	2019-02-04 18:51:19 UTC (rev 240931)
@@ -79,7 +79,6 @@
 
 #if ENABLE(INDEXED_DATABASE)
     EstablishIDBConnectionToServer(PAL::SessionID sessionID) -> (uint64_t serverConnectionIdentifier) LegacySync
-    RemoveIDBConnectionToServer(uint64_t serverConnectionIdentifier)
 #endif
 
 #if ENABLE(SERVICE_WORKER)

Modified: trunk/Source/WebKit/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp (240930 => 240931)


--- trunk/Source/WebKit/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp	2019-02-04 18:47:23 UTC (rev 240930)
+++ trunk/Source/WebKit/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp	2019-02-04 18:51:19 UTC (rev 240931)
@@ -64,14 +64,11 @@
 
     m_isOpenInServer = sendSync(Messages::NetworkConnectionToWebProcess::EstablishIDBConnectionToServer(sessionID), Messages::NetworkConnectionToWebProcess::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);
 }
 
 WebIDBConnectionToServer::~WebIDBConnectionToServer()
 {
-    if (m_isOpenInServer)
-        send(Messages::NetworkConnectionToWebProcess::RemoveIDBConnectionToServer(m_identifier));
 }
 
 IPC::Connection* WebIDBConnectionToServer::messageSenderConnection()
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to