Changeset 259689 in webkit
- Timestamp:
- Apr 7, 2020, 5:32:26 PM (6 years ago)
- Location:
- branches/safari-609-branch/Source
- Files:
-
- 11 edited
-
WTF/ChangeLog (modified) (1 diff)
-
WTF/wtf/CrossThreadTaskHandler.cpp (modified) (2 diffs)
-
WTF/wtf/CrossThreadTaskHandler.h (modified) (2 diffs)
-
WebCore/ChangeLog (modified) (1 diff)
-
WebCore/Modules/indexeddb/server/IDBServer.cpp (modified) (3 diffs)
-
WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp (modified) (1 diff)
-
WebCore/Modules/indexeddb/server/UniqueIDBDatabase.h (modified) (1 diff)
-
WebKit/ChangeLog (modified) (1 diff)
-
WebKit/NetworkProcess/IndexedDB/WebIDBServer.cpp (modified) (4 diffs)
-
WebKit/NetworkProcess/IndexedDB/WebIDBServer.h (modified) (2 diffs)
-
WebKit/NetworkProcess/NetworkProcess.cpp (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/safari-609-branch/Source/WTF/ChangeLog
r258921 r259689 1 2020-04-07 Russell Epstein <repstein@apple.com> 2 3 Cherry-pick r259316. rdar://problem/61269751 4 5 IndexedDB: destroy WebIDBServer when session is removed in network process 6 https://bugs.webkit.org/show_bug.cgi?id=209606 7 <rdar://problem/59310081> 8 9 Reviewed by Geoffrey Garen. 10 11 Source/WebCore: 12 13 Rename immediateCloseForUserDelete to immediateClose as we now use it in destructor of IDBServer to make sure 14 everything in database finishes correctly. 15 16 * Modules/indexeddb/server/IDBServer.cpp: 17 (WebCore::IDBServer::IDBServer::~IDBServer): 18 (WebCore::IDBServer::IDBServer::closeAndDeleteDatabasesModifiedSince): 19 (WebCore::IDBServer::IDBServer::closeAndDeleteDatabasesForOrigins): 20 * Modules/indexeddb/server/UniqueIDBDatabase.cpp: 21 (WebCore::IDBServer::UniqueIDBDatabase::immediateClose): 22 (WebCore::IDBServer::UniqueIDBDatabase::immediateCloseForUserDelete): Deleted. 23 * Modules/indexeddb/server/UniqueIDBDatabase.h: 24 25 Source/WebKit: 26 27 Tested manually to verify WebIDBServer is removed and its thread ends when session is removed. 28 29 * NetworkProcess/IndexedDB/WebIDBServer.cpp: 30 (WebKit::WebIDBServer::~WebIDBServer): 31 (WebKit::WebIDBServer::addConnection): 32 (WebKit::WebIDBServer::removeConnection): 33 (WebKit::WebIDBServer::close): 34 * NetworkProcess/IndexedDB/WebIDBServer.h: 35 * NetworkProcess/NetworkProcess.cpp: 36 (WebKit::NetworkProcess::destroySession): 37 (WebKit::NetworkProcess::connectionToWebProcessClosed): 38 39 Source/WTF: 40 41 Add function to kill CrossThreadTaskHandler and make thread finish. Also add a callback to be called before 42 thread finishes. 43 44 * wtf/CrossThreadTaskHandler.cpp: 45 (WTF::CrossThreadTaskHandler::CrossThreadTaskHandler): 46 (WTF::CrossThreadTaskHandler::setCompletionCallback): 47 (WTF::CrossThreadTaskHandler::kill): 48 * wtf/CrossThreadTaskHandler.h: 49 50 git-svn-id: https://svn.webkit.org/repository/webkit/trunk@259316 268f45cc-cd09-0410-ab3c-d52691b4dbfc 51 52 2020-03-31 Sihui Liu <sihui_liu@apple.com> 53 54 IndexedDB: destroy WebIDBServer when session is removed in network process 55 https://bugs.webkit.org/show_bug.cgi?id=209606 56 <rdar://problem/59310081> 57 58 Reviewed by Geoffrey Garen. 59 60 Add function to kill CrossThreadTaskHandler and make thread finish. Also add a callback to be called before 61 thread finishes. 62 63 * wtf/CrossThreadTaskHandler.cpp: 64 (WTF::CrossThreadTaskHandler::CrossThreadTaskHandler): 65 (WTF::CrossThreadTaskHandler::setCompletionCallback): 66 (WTF::CrossThreadTaskHandler::kill): 67 * wtf/CrossThreadTaskHandler.h: 68 1 69 2020-02-20 Russell Epstein <repstein@apple.com> 2 70 -
branches/safari-609-branch/Source/WTF/wtf/CrossThreadTaskHandler.cpp
r248846 r259689 38 38 Thread::create(threadName, [this] { 39 39 taskRunLoop(); 40 41 if (m_completionCallback) 42 m_completionCallback(); 40 43 })->detach(); 41 44 } … … 133 136 } 134 137 138 void CrossThreadTaskHandler::setCompletionCallback(Function<void ()>&& completionCallback) 139 { 140 m_completionCallback = WTFMove(completionCallback); 141 } 142 143 void CrossThreadTaskHandler::kill() 144 { 145 m_taskQueue.kill(); 146 m_taskReplyQueue.kill(); 147 } 148 135 149 } // namespace WTF -
branches/safari-609-branch/Source/WTF/wtf/CrossThreadTaskHandler.h
r245871 r259689 49 49 WTF_EXPORT_PRIVATE void resume(); 50 50 51 WTF_EXPORT_PRIVATE void kill(); 52 WTF_EXPORT_PRIVATE void setCompletionCallback(Function<void ()>&&); 53 51 54 private: 52 55 void handleTaskRepliesOnMainThread(); … … 69 72 CrossThreadQueue<CrossThreadTask> m_taskQueue; 70 73 CrossThreadQueue<CrossThreadTask> m_taskReplyQueue; 74 75 Function<void ()> m_completionCallback; 71 76 }; 72 77 -
branches/safari-609-branch/Source/WebCore/ChangeLog
r259604 r259689 1 2020-04-07 Russell Epstein <repstein@apple.com> 2 3 Cherry-pick r259316. rdar://problem/61269751 4 5 IndexedDB: destroy WebIDBServer when session is removed in network process 6 https://bugs.webkit.org/show_bug.cgi?id=209606 7 <rdar://problem/59310081> 8 9 Reviewed by Geoffrey Garen. 10 11 Source/WebCore: 12 13 Rename immediateCloseForUserDelete to immediateClose as we now use it in destructor of IDBServer to make sure 14 everything in database finishes correctly. 15 16 * Modules/indexeddb/server/IDBServer.cpp: 17 (WebCore::IDBServer::IDBServer::~IDBServer): 18 (WebCore::IDBServer::IDBServer::closeAndDeleteDatabasesModifiedSince): 19 (WebCore::IDBServer::IDBServer::closeAndDeleteDatabasesForOrigins): 20 * Modules/indexeddb/server/UniqueIDBDatabase.cpp: 21 (WebCore::IDBServer::UniqueIDBDatabase::immediateClose): 22 (WebCore::IDBServer::UniqueIDBDatabase::immediateCloseForUserDelete): Deleted. 23 * Modules/indexeddb/server/UniqueIDBDatabase.h: 24 25 Source/WebKit: 26 27 Tested manually to verify WebIDBServer is removed and its thread ends when session is removed. 28 29 * NetworkProcess/IndexedDB/WebIDBServer.cpp: 30 (WebKit::WebIDBServer::~WebIDBServer): 31 (WebKit::WebIDBServer::addConnection): 32 (WebKit::WebIDBServer::removeConnection): 33 (WebKit::WebIDBServer::close): 34 * NetworkProcess/IndexedDB/WebIDBServer.h: 35 * NetworkProcess/NetworkProcess.cpp: 36 (WebKit::NetworkProcess::destroySession): 37 (WebKit::NetworkProcess::connectionToWebProcessClosed): 38 39 Source/WTF: 40 41 Add function to kill CrossThreadTaskHandler and make thread finish. Also add a callback to be called before 42 thread finishes. 43 44 * wtf/CrossThreadTaskHandler.cpp: 45 (WTF::CrossThreadTaskHandler::CrossThreadTaskHandler): 46 (WTF::CrossThreadTaskHandler::setCompletionCallback): 47 (WTF::CrossThreadTaskHandler::kill): 48 * wtf/CrossThreadTaskHandler.h: 49 50 git-svn-id: https://svn.webkit.org/repository/webkit/trunk@259316 268f45cc-cd09-0410-ab3c-d52691b4dbfc 51 52 2020-03-31 Sihui Liu <sihui_liu@apple.com> 53 54 IndexedDB: destroy WebIDBServer when session is removed in network process 55 https://bugs.webkit.org/show_bug.cgi?id=209606 56 <rdar://problem/59310081> 57 58 Reviewed by Geoffrey Garen. 59 60 Rename immediateCloseForUserDelete to immediateClose as we now use it in destructor of IDBServer to make sure 61 everything in database finishes correctly. 62 63 * Modules/indexeddb/server/IDBServer.cpp: 64 (WebCore::IDBServer::IDBServer::~IDBServer): 65 (WebCore::IDBServer::IDBServer::closeAndDeleteDatabasesModifiedSince): 66 (WebCore::IDBServer::IDBServer::closeAndDeleteDatabasesForOrigins): 67 * Modules/indexeddb/server/UniqueIDBDatabase.cpp: 68 (WebCore::IDBServer::UniqueIDBDatabase::immediateClose): 69 (WebCore::IDBServer::UniqueIDBDatabase::immediateCloseForUserDelete): Deleted. 70 * Modules/indexeddb/server/UniqueIDBDatabase.h: 71 1 72 2020-04-06 Alan Coon <alancoon@apple.com> 2 73 -
branches/safari-609-branch/Source/WebCore/Modules/indexeddb/server/IDBServer.cpp
r253740 r259689 61 61 { 62 62 ASSERT(!isMainThread()); 63 64 for (auto& database : m_uniqueIDBDatabaseMap.values()) 65 database->immediateClose(); 63 66 } 64 67 … … 535 538 HashSet<UniqueIDBDatabase*> openDatabases; 536 539 for (auto& database : m_uniqueIDBDatabaseMap.values()) 537 database->immediateClose ForUserDelete();540 database->immediateClose(); 538 541 539 542 m_uniqueIDBDatabaseMap.clear(); … … 562 565 563 566 for (auto& database : openDatabases) { 564 database->immediateClose ForUserDelete();567 database->immediateClose(); 565 568 m_uniqueIDBDatabaseMap.remove(database->identifier()); 566 569 } -
branches/safari-609-branch/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp
r254028 r259689 1148 1148 } 1149 1149 1150 void UniqueIDBDatabase::immediateClose ForUserDelete()1151 { 1152 LOG(IndexedDB, "UniqueIDBDatabase::immediateClose ForUserDelete");1150 void UniqueIDBDatabase::immediateClose() 1151 { 1152 LOG(IndexedDB, "UniqueIDBDatabase::immediateClose"); 1153 1153 1154 1154 // Error out all transactions. -
branches/safari-609-branch/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.h
r253740 r259689 108 108 109 109 void handleDelete(IDBConnectionToClient&, const IDBRequestData&); 110 void immediateClose ForUserDelete();110 void immediateClose(); 111 111 112 112 void abortActiveTransactions(); -
branches/safari-609-branch/Source/WebKit/ChangeLog
r259685 r259689 1 2020-04-07 Russell Epstein <repstein@apple.com> 2 3 Cherry-pick r259316. rdar://problem/61269751 4 5 IndexedDB: destroy WebIDBServer when session is removed in network process 6 https://bugs.webkit.org/show_bug.cgi?id=209606 7 <rdar://problem/59310081> 8 9 Reviewed by Geoffrey Garen. 10 11 Source/WebCore: 12 13 Rename immediateCloseForUserDelete to immediateClose as we now use it in destructor of IDBServer to make sure 14 everything in database finishes correctly. 15 16 * Modules/indexeddb/server/IDBServer.cpp: 17 (WebCore::IDBServer::IDBServer::~IDBServer): 18 (WebCore::IDBServer::IDBServer::closeAndDeleteDatabasesModifiedSince): 19 (WebCore::IDBServer::IDBServer::closeAndDeleteDatabasesForOrigins): 20 * Modules/indexeddb/server/UniqueIDBDatabase.cpp: 21 (WebCore::IDBServer::UniqueIDBDatabase::immediateClose): 22 (WebCore::IDBServer::UniqueIDBDatabase::immediateCloseForUserDelete): Deleted. 23 * Modules/indexeddb/server/UniqueIDBDatabase.h: 24 25 Source/WebKit: 26 27 Tested manually to verify WebIDBServer is removed and its thread ends when session is removed. 28 29 * NetworkProcess/IndexedDB/WebIDBServer.cpp: 30 (WebKit::WebIDBServer::~WebIDBServer): 31 (WebKit::WebIDBServer::addConnection): 32 (WebKit::WebIDBServer::removeConnection): 33 (WebKit::WebIDBServer::close): 34 * NetworkProcess/IndexedDB/WebIDBServer.h: 35 * NetworkProcess/NetworkProcess.cpp: 36 (WebKit::NetworkProcess::destroySession): 37 (WebKit::NetworkProcess::connectionToWebProcessClosed): 38 39 Source/WTF: 40 41 Add function to kill CrossThreadTaskHandler and make thread finish. Also add a callback to be called before 42 thread finishes. 43 44 * wtf/CrossThreadTaskHandler.cpp: 45 (WTF::CrossThreadTaskHandler::CrossThreadTaskHandler): 46 (WTF::CrossThreadTaskHandler::setCompletionCallback): 47 (WTF::CrossThreadTaskHandler::kill): 48 * wtf/CrossThreadTaskHandler.h: 49 50 git-svn-id: https://svn.webkit.org/repository/webkit/trunk@259316 268f45cc-cd09-0410-ab3c-d52691b4dbfc 51 52 2020-03-31 Sihui Liu <sihui_liu@apple.com> 53 54 IndexedDB: destroy WebIDBServer when session is removed in network process 55 https://bugs.webkit.org/show_bug.cgi?id=209606 56 <rdar://problem/59310081> 57 58 Reviewed by Geoffrey Garen. 59 60 Tested manually to verify WebIDBServer is removed and its thread ends when session is removed. 61 62 * NetworkProcess/IndexedDB/WebIDBServer.cpp: 63 (WebKit::WebIDBServer::~WebIDBServer): 64 (WebKit::WebIDBServer::addConnection): 65 (WebKit::WebIDBServer::removeConnection): 66 (WebKit::WebIDBServer::close): 67 * NetworkProcess/IndexedDB/WebIDBServer.h: 68 * NetworkProcess/NetworkProcess.cpp: 69 (WebKit::NetworkProcess::destroySession): 70 (WebKit::NetworkProcess::connectionToWebProcessClosed): 71 1 72 2020-04-07 Russell Epstein <repstein@apple.com> 2 73 -
branches/safari-609-branch/Source/WebKit/NetworkProcess/IndexedDB/WebIDBServer.cpp
r257171 r259689 54 54 semaphore.wait(); 55 55 } 56 56 57 WebIDBServer::~WebIDBServer() 58 { 59 ASSERT(RunLoop::isMain()); 60 } 61 57 62 void WebIDBServer::closeAndDeleteDatabasesModifiedSince(WallTime modificationTime, CompletionHandler<void()>&& callback) 58 63 { … … 336 341 m_server->registerConnection(iter->value->connectionToClient()); 337 342 }); 343 m_connections.add(&connection); 338 344 connection.addThreadMessageReceiver(Messages::WebIDBServer::messageReceiverName(), this); 339 345 } … … 343 349 ASSERT(RunLoop::isMain()); 344 350 351 m_connections.remove(&connection); 345 352 connection.removeThreadMessageReceiver(Messages::WebIDBServer::messageReceiverName()); 346 353 postTask([this, protectedThis = makeRef(*this), connectionID = connection.uniqueID()] { … … 366 373 } 367 374 375 void WebIDBServer::close() 376 { 377 ASSERT(RunLoop::isMain()); 378 379 // Remove the references held by IPC::Connection. 380 for (auto* connection : m_connections) 381 connection->removeThreadMessageReceiver(Messages::WebIDBServer::messageReceiverName()); 382 383 CrossThreadTaskHandler::setCompletionCallback([protectedThis = makeRef(*this)]() mutable { 384 ASSERT(!RunLoop::isMain()); 385 callOnMainRunLoop([protectedThis = WTFMove(protectedThis)]() mutable { }); 386 }); 387 388 postTask([this]() mutable { 389 m_connectionMap.clear(); 390 m_server = nullptr; 391 392 CrossThreadTaskHandler::kill(); 393 }); 394 } 395 368 396 } // namespace WebKit 369 397 #endif -
branches/safari-609-branch/Source/WebKit/NetworkProcess/IndexedDB/WebIDBServer.h
r253740 r259689 88 88 void didReceiveMessage(IPC::Connection&, IPC::Decoder&); 89 89 void dispatchToThread(WTF::Function<void()>&&); 90 void close(); 90 91 91 92 private: 92 93 WebIDBServer(PAL::SessionID, const String& directory, WebCore::IDBServer::IDBServer::StorageQuotaManagerSpaceRequester&&); 94 ~WebIDBServer(); 93 95 94 96 void postTask(WTF::Function<void()>&&); … … 98 100 99 101 HashMap<IPC::Connection::UniqueID, std::unique_ptr<WebIDBConnectionToClient>> m_connectionMap; 102 HashSet<IPC::Connection*> m_connections; 100 103 }; 101 104 -
branches/safari-609-branch/Source/WebKit/NetworkProcess/NetworkProcess.cpp
r257168 r259689 579 579 580 580 m_storageManagerSet->remove(sessionID); 581 if (auto webIDBServer = m_webIDBServers.take(sessionID)) 582 webIDBServer->close(); 581 583 } 582 584 … … 2545 2547 { 2546 2548 m_storageManagerSet->removeConnection(connection); 2547 webIDBServer(sessionID).removeConnection(connection); 2549 if (auto* webIDBServer = m_webIDBServers.get(sessionID)) 2550 webIDBServer->removeConnection(connection); 2548 2551 } 2549 2552
Note:
See TracChangeset
for help on using the changeset viewer.