Changeset 240090 in webkit
- Timestamp:
- Jan 16, 2019, 3:52:36 PM (8 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 2 edited
-
ChangeLog (modified) (1 diff)
-
Modules/indexeddb/server/UniqueIDBDatabase.cpp (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r240054 r240090 1 2019-01-16 Sihui Liu <sihui_liu@apple.com> 2 3 IndexedDB: UniqueIDBDatabase should not be freed if the database task queue is not empty. 4 https://bugs.webkit.org/show_bug.cgi?id=193093 5 6 Reviewed by Brady Eidson. 7 8 performUnconditionalDeleteBackingStore killed the database task queue immediately, but performPrefetchCursor 9 task may be scheduled behind performUnconditionalDeleteBackingStore on database thread. 10 11 * Modules/indexeddb/server/UniqueIDBDatabase.cpp: 12 (WebCore::IDBServer::UniqueIDBDatabase::shutdownForClose): 13 (WebCore::IDBServer::UniqueIDBDatabase::performPrefetchCursor): 14 (WebCore::IDBServer::UniqueIDBDatabase::isDoneWithHardClose): 15 1 16 2019-01-16 Alex Christensen <achristensen@webkit.org> 2 17 -
trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp
r239872 r240090 293 293 m_backingStoreIsEphemeral = false; 294 294 295 ASSERT(m_databaseQueue.isEmpty()); 295 if (!m_databaseQueue.isEmpty()) { 296 postDatabaseTask(createCrossThreadTask(*this, &UniqueIDBDatabase::shutdownForClose)); 297 return; 298 } 296 299 m_databaseQueue.kill(); 297 300 … … 1272 1275 LOG(IndexedDB, "(db) UniqueIDBDatabase::performPrefetchCursor"); 1273 1276 1274 if (m_backingStore->prefetchCursor(transactionIdentifier, cursorIdentifier)) 1277 if (m_hardClosedForUserDelete || !m_backingStore->prefetchCursor(transactionIdentifier, cursorIdentifier)) 1278 m_cursorPrefetches.remove(cursorIdentifier); 1279 else 1275 1280 postDatabaseTask(createCrossThreadTask(*this, &UniqueIDBDatabase::performPrefetchCursor, transactionIdentifier, cursorIdentifier)); 1276 else1277 m_cursorPrefetches.remove(cursorIdentifier);1278 1281 } 1279 1282 … … 1785 1788 bool UniqueIDBDatabase::isDoneWithHardClose() 1786 1789 { 1787 return m_database Queue.isKilled() && m_clientClosePendingDatabaseConnections.isEmpty() && m_serverClosePendingDatabaseConnections.isEmpty();1790 return m_databaseReplyQueue.isKilled() && m_clientClosePendingDatabaseConnections.isEmpty() && m_serverClosePendingDatabaseConnections.isEmpty(); 1788 1791 } 1789 1792
Note:
See TracChangeset
for help on using the changeset viewer.