Title: [240039] trunk/Source/WebCore
Revision
240039
Author
sihui_...@apple.com
Date
2019-01-16 09:11:47 -0800 (Wed, 16 Jan 2019)

Log Message

IndexedDB: leak WebIDBConnectionToClient for retain cycle
https://bugs.webkit.org/show_bug.cgi?id=193097
<rdar://problem/46899601>

Reviewed by David Kilzer.

Fix API test failure after r239887. After removing the retain cycle, IDBConnectionToClient will no longer live
forever so make sure it is not destructed before UniqueIDBDatabaseConnection unregisters itself.

* Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp:
(WebCore::IDBServer::UniqueIDBDatabaseConnection::UniqueIDBDatabaseConnection):
(WebCore::IDBServer::UniqueIDBDatabaseConnection::~UniqueIDBDatabaseConnection):
(WebCore::IDBServer::UniqueIDBDatabaseConnection::fireVersionChangeEvent):
(WebCore::IDBServer::UniqueIDBDatabaseConnection::didAbortTransaction):
(WebCore::IDBServer::UniqueIDBDatabaseConnection::didCommitTransaction):
(WebCore::IDBServer::UniqueIDBDatabaseConnection::didCreateObjectStore):
(WebCore::IDBServer::UniqueIDBDatabaseConnection::didDeleteObjectStore):
(WebCore::IDBServer::UniqueIDBDatabaseConnection::didRenameObjectStore):
(WebCore::IDBServer::UniqueIDBDatabaseConnection::didClearObjectStore):
(WebCore::IDBServer::UniqueIDBDatabaseConnection::didCreateIndex):
(WebCore::IDBServer::UniqueIDBDatabaseConnection::didDeleteIndex):
(WebCore::IDBServer::UniqueIDBDatabaseConnection::didRenameIndex):
* Modules/indexeddb/server/UniqueIDBDatabaseConnection.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (240038 => 240039)


--- trunk/Source/WebCore/ChangeLog	2019-01-16 16:32:36 UTC (rev 240038)
+++ trunk/Source/WebCore/ChangeLog	2019-01-16 17:11:47 UTC (rev 240039)
@@ -1,3 +1,29 @@
+2019-01-16  Sihui Liu  <sihui_...@apple.com>
+
+        IndexedDB: leak WebIDBConnectionToClient for retain cycle
+        https://bugs.webkit.org/show_bug.cgi?id=193097
+        <rdar://problem/46899601>
+
+        Reviewed by David Kilzer.
+
+        Fix API test failure after r239887. After removing the retain cycle, IDBConnectionToClient will no longer live 
+        forever so make sure it is not destructed before UniqueIDBDatabaseConnection unregisters itself.
+
+        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp:
+        (WebCore::IDBServer::UniqueIDBDatabaseConnection::UniqueIDBDatabaseConnection):
+        (WebCore::IDBServer::UniqueIDBDatabaseConnection::~UniqueIDBDatabaseConnection):
+        (WebCore::IDBServer::UniqueIDBDatabaseConnection::fireVersionChangeEvent):
+        (WebCore::IDBServer::UniqueIDBDatabaseConnection::didAbortTransaction):
+        (WebCore::IDBServer::UniqueIDBDatabaseConnection::didCommitTransaction):
+        (WebCore::IDBServer::UniqueIDBDatabaseConnection::didCreateObjectStore):
+        (WebCore::IDBServer::UniqueIDBDatabaseConnection::didDeleteObjectStore):
+        (WebCore::IDBServer::UniqueIDBDatabaseConnection::didRenameObjectStore):
+        (WebCore::IDBServer::UniqueIDBDatabaseConnection::didClearObjectStore):
+        (WebCore::IDBServer::UniqueIDBDatabaseConnection::didCreateIndex):
+        (WebCore::IDBServer::UniqueIDBDatabaseConnection::didDeleteIndex):
+        (WebCore::IDBServer::UniqueIDBDatabaseConnection::didRenameIndex):
+        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.h:
+
 2019-01-16  Antti Koivisto  <an...@apple.com>
 
         Add more assertions to find root cause for release assert hit in StyleResolver

Modified: trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp (240038 => 240039)


--- trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp	2019-01-16 16:32:36 UTC (rev 240038)
+++ trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp	2019-01-16 17:11:47 UTC (rev 240039)
@@ -49,7 +49,7 @@
     , m_openRequestIdentifier(request.requestData().requestIdentifier())
 {
     m_database->server().registerDatabaseConnection(*this);
-    m_connectionToClient.registerDatabaseConnection(*this);
+    m_connectionToClient->registerDatabaseConnection(*this);
 }
 
 UniqueIDBDatabaseConnection::~UniqueIDBDatabaseConnection()
@@ -56,7 +56,7 @@
 {
     if (m_database)
         m_database->server().unregisterDatabaseConnection(*this);
-    m_connectionToClient.unregisterDatabaseConnection(*this);
+    m_connectionToClient->unregisterDatabaseConnection(*this);
 }
 
 bool UniqueIDBDatabaseConnection::hasNonFinishedTransactions() const
@@ -127,7 +127,7 @@
 void UniqueIDBDatabaseConnection::fireVersionChangeEvent(const IDBResourceIdentifier& requestIdentifier, uint64_t requestedVersion)
 {
     ASSERT(!m_closePending);
-    m_connectionToClient.fireVersionChangeEvent(*this, requestIdentifier, requestedVersion);
+    m_connectionToClient->fireVersionChangeEvent(*this, requestIdentifier, requestedVersion);
 }
 
 UniqueIDBDatabaseTransaction& UniqueIDBDatabaseConnection::createVersionChangeTransaction(uint64_t newVersion)
@@ -172,7 +172,7 @@
     ASSERT(m_database);
     ASSERT(takenTransaction || m_database->hardClosedForUserDelete());
     if (takenTransaction)
-        m_connectionToClient.didAbortTransaction(transactionIdentifier, error);
+        m_connectionToClient->didAbortTransaction(transactionIdentifier, error);
 }
 
 void UniqueIDBDatabaseConnection::didCommitTransaction(UniqueIDBDatabaseTransaction& transaction, const IDBError& error)
@@ -184,7 +184,7 @@
     ASSERT(m_transactionMap.contains(transactionIdentifier));
     m_transactionMap.remove(transactionIdentifier);
 
-    m_connectionToClient.didCommitTransaction(transactionIdentifier, error);
+    m_connectionToClient->didCommitTransaction(transactionIdentifier, error);
 }
 
 void UniqueIDBDatabaseConnection::didCreateObjectStore(const IDBResultData& resultData)
@@ -191,7 +191,7 @@
 {
     LOG(IndexedDB, "UniqueIDBDatabaseConnection::didCreateObjectStore");
 
-    m_connectionToClient.didCreateObjectStore(resultData);
+    m_connectionToClient->didCreateObjectStore(resultData);
 }
 
 void UniqueIDBDatabaseConnection::didDeleteObjectStore(const IDBResultData& resultData)
@@ -198,7 +198,7 @@
 {
     LOG(IndexedDB, "UniqueIDBDatabaseConnection::didDeleteObjectStore");
 
-    m_connectionToClient.didDeleteObjectStore(resultData);
+    m_connectionToClient->didDeleteObjectStore(resultData);
 }
 
 void UniqueIDBDatabaseConnection::didRenameObjectStore(const IDBResultData& resultData)
@@ -205,7 +205,7 @@
 {
     LOG(IndexedDB, "UniqueIDBDatabaseConnection::didRenameObjectStore");
 
-    m_connectionToClient.didRenameObjectStore(resultData);
+    m_connectionToClient->didRenameObjectStore(resultData);
 }
 
 void UniqueIDBDatabaseConnection::didClearObjectStore(const IDBResultData& resultData)
@@ -212,7 +212,7 @@
 {
     LOG(IndexedDB, "UniqueIDBDatabaseConnection::didClearObjectStore");
 
-    m_connectionToClient.didClearObjectStore(resultData);
+    m_connectionToClient->didClearObjectStore(resultData);
 }
 
 void UniqueIDBDatabaseConnection::didCreateIndex(const IDBResultData& resultData)
@@ -219,7 +219,7 @@
 {
     LOG(IndexedDB, "UniqueIDBDatabaseConnection::didCreateIndex");
 
-    m_connectionToClient.didCreateIndex(resultData);
+    m_connectionToClient->didCreateIndex(resultData);
 }
 
 void UniqueIDBDatabaseConnection::didDeleteIndex(const IDBResultData& resultData)
@@ -226,7 +226,7 @@
 {
     LOG(IndexedDB, "UniqueIDBDatabaseConnection::didDeleteIndex");
 
-    m_connectionToClient.didDeleteIndex(resultData);
+    m_connectionToClient->didDeleteIndex(resultData);
 }
 
 void UniqueIDBDatabaseConnection::didRenameIndex(const IDBResultData& resultData)
@@ -233,7 +233,7 @@
 {
     LOG(IndexedDB, "UniqueIDBDatabaseConnection::didRenameIndex");
 
-    m_connectionToClient.didRenameIndex(resultData);
+    m_connectionToClient->didRenameIndex(resultData);
 }
 
 bool UniqueIDBDatabaseConnection::connectionIsClosing() const

Modified: trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.h (240038 => 240039)


--- trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.h	2019-01-16 16:32:36 UTC (rev 240038)
+++ trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.h	2019-01-16 17:11:47 UTC (rev 240039)
@@ -90,7 +90,7 @@
     UniqueIDBDatabaseConnection(UniqueIDBDatabase&, ServerOpenDBRequest&);
 
     WeakPtr<UniqueIDBDatabase> m_database;
-    IDBConnectionToClient& m_connectionToClient;
+    Ref<IDBConnectionToClient> m_connectionToClient;
     IDBResourceIdentifier m_openRequestIdentifier;
 
     bool m_closePending { false };
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to