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 };