⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 275799 in webkit


Ignore:
Timestamp:
Apr 10, 2021, 10:56:53 AM (5 years ago)
Author:
sihui_liu@apple.com
Message:

Unreviewed, reverting r275794, r275784, r275779

r275779 caused bots to crash and r275794, r275784 didn't fully fix it; reverting the patches to investigate.

Reverted changeset:

"Create WebIDBServer only when it is needed"
https://bugs.webkit.org/show_bug.cgi?id=224305
https://commits.webkit.org/r275779

Location:
trunk/Source/WebKit
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r275794 r275799  
     12021-04-10  Sihui Liu  <sihui_liu@apple.com>
     2
     3        Unreviewed, reverting r275794, r275784, r275779
     4
     5        r275779 caused bots to crash and r275794, r275784 didn't fully fix it; reverting the patches to investigate.
     6
     7        Reverted changeset:
     8
     9        "Create WebIDBServer only when it is needed"
     10        https://bugs.webkit.org/show_bug.cgi?id=224305
     11        https://commits.webkit.org/r275779
     12
    1132021-04-10  Sihui Liu  <sihui_liu@apple.com>
    214
  • trunk/Source/WebKit/NetworkProcess/IndexedDB/WebIDBServer.cpp

    r275794 r275799  
    3535namespace WebKit {
    3636
    37 Ref<WebIDBServer> WebIDBServer::create(PAL::SessionID sessionID, const String& directory, WebCore::IDBServer::IDBServer::StorageQuotaManagerSpaceRequester&& spaceRequester, CompletionHandler<void()>&& callback)
    38 {
    39     return adoptRef(*new WebIDBServer(sessionID, directory, WTFMove(spaceRequester), WTFMove(callback)));
    40 }
    41 
    42 WebIDBServer::WebIDBServer(PAL::SessionID sessionID, const String& directory, WebCore::IDBServer::IDBServer::StorageQuotaManagerSpaceRequester&& spaceRequester, CompletionHandler<void()>&& callback)
     37Ref<WebIDBServer> WebIDBServer::create(PAL::SessionID sessionID, const String& directory, WebCore::IDBServer::IDBServer::StorageQuotaManagerSpaceRequester&& spaceRequester)
     38{
     39    return adoptRef(*new WebIDBServer(sessionID, directory, WTFMove(spaceRequester)));
     40}
     41
     42WebIDBServer::WebIDBServer(PAL::SessionID sessionID, const String& directory, WebCore::IDBServer::IDBServer::StorageQuotaManagerSpaceRequester&& spaceRequester)
    4343    : CrossThreadTaskHandler("com.apple.WebKit.IndexedDBServer", WTF::CrossThreadTaskHandler::AutodrainedPoolForRunLoop::Use)
    44     , m_dataTaskCounter([weakThis = makeWeakPtr(this)](RefCounterEvent) {
    45         if (weakThis)
    46             weakThis->tryClose();
    47     })
    48     , m_closeCallback(WTFMove(callback))
    4944{
    5045    ASSERT(RunLoop::isMain());
     
    6762    ASSERT(RunLoop::isMain());
    6863
    69     postTask([this, protectedThis = makeRef(*this), callback = WTFMove(callback), token = m_dataTaskCounter.count()]() mutable {
     64    postTask([this, protectedThis = makeRef(*this), callback = WTFMove(callback)]() mutable {
    7065        ASSERT(!RunLoop::isMain());
    7166
    7267        LockHolder locker(m_server->lock());
    73         postTaskReply(CrossThreadTask([callback = WTFMove(callback), token = WTFMove(token), origins = crossThreadCopy(m_server->getOrigins())]() mutable {
     68        postTaskReply(CrossThreadTask([callback = WTFMove(callback), origins = crossThreadCopy(m_server->getOrigins())]() mutable {
    7469            callback(WTFMove(origins));
    7570        }));
     
    8176    ASSERT(RunLoop::isMain());
    8277
    83     postTask([this, protectedThis = makeRef(*this), modificationTime, callback = WTFMove(callback), token = m_dataTaskCounter.count()]() mutable {
     78    postTask([this, protectedThis = makeRef(*this), modificationTime, callback = WTFMove(callback)]() mutable {
    8479        ASSERT(!RunLoop::isMain());
    8580
    8681        LockHolder locker(m_server->lock());
    8782        m_server->closeAndDeleteDatabasesModifiedSince(modificationTime);
    88         postTaskReply(CrossThreadTask([callback = WTFMove(callback), token = WTFMove(token)]() mutable {
     83        postTaskReply(CrossThreadTask([callback = WTFMove(callback)]() mutable {
    8984            callback();
    9085        }));
     
    9691    ASSERT(RunLoop::isMain());
    9792
    98     postTask([this, protectedThis = makeRef(*this), originDatas = originDatas.isolatedCopy(), callback = WTFMove(callback), token = m_dataTaskCounter.count()] () mutable {
     93    postTask([this, protectedThis = makeRef(*this), originDatas = originDatas.isolatedCopy(), callback = WTFMove(callback)] () mutable {
    9994        ASSERT(!RunLoop::isMain());
    10095
    10196        LockHolder locker(m_server->lock());
    10297        m_server->closeAndDeleteDatabasesForOrigins(originDatas);
    103         postTaskReply(CrossThreadTask([callback = WTFMove(callback), token = WTFMove(token)]() mutable {
     98        postTaskReply(CrossThreadTask([callback = WTFMove(callback)]() mutable {
    10499            callback();
    105100        }));
     
    111106    ASSERT(RunLoop::isMain());
    112107
    113     postTask([this, protectedThis = makeRef(*this), oldOrigin = oldOrigin.isolatedCopy(), newOrigin = newOrigin.isolatedCopy(), callback = WTFMove(callback), token = m_dataTaskCounter.count()] () mutable {
     108    postTask([this, protectedThis = makeRef(*this), oldOrigin = oldOrigin.isolatedCopy(), newOrigin = newOrigin.isolatedCopy(), callback = WTFMove(callback)] () mutable {
    114109        ASSERT(!RunLoop::isMain());
    115110
    116111        LockHolder locker(m_server->lock());
    117112        m_server->renameOrigin(oldOrigin, newOrigin);
    118         postTaskReply(CrossThreadTask([callback = WTFMove(callback), token = WTFMove(token)]() mutable {
    119             callback();
    120         }));
     113        postTaskReply(CrossThreadTask(WTFMove(callback)));
    121114    });
    122115}
     
    378371    ASSERT(RunLoop::isMain());
    379372
    380     auto* takenConnection = m_connections.take(&connection);
    381     if (!takenConnection)
    382         return;
    383 
    384     takenConnection->removeThreadMessageReceiver(Messages::WebIDBServer::messageReceiverName());
     373    m_connections.remove(&connection);
     374    connection.removeThreadMessageReceiver(Messages::WebIDBServer::messageReceiverName());
    385375    postTask([this, protectedThis = makeRef(*this), connectionID = connection.uniqueID()] {
    386376        auto connection = m_connectionMap.take(connectionID);
     377
    387378        ASSERT(connection);
    388379
     
    390381        m_server->unregisterConnection(connection->connectionToClient());
    391382    });
    392 
    393     tryClose();
    394383}
    395384
     
    427416}
    428417
    429 void WebIDBServer::tryClose()
    430 {
    431     if (!m_connections.isEmpty() || m_dataTaskCounter.value())
    432         return;
    433 
    434     if (!m_closeCallback)
    435         return;
    436 
    437     close();
    438     m_closeCallback();
    439 }
    440 
    441418} // namespace WebKit
  • trunk/Source/WebKit/NetworkProcess/IndexedDB/WebIDBServer.h

    r275779 r275799  
    3232#include <WebCore/StorageQuotaManager.h>
    3333#include <wtf/CrossThreadTaskHandler.h>
    34 #include <wtf/RefCounter.h>
    3534
    3635namespace WebCore {
     
    4544class WebIDBServer final : public CrossThreadTaskHandler, public IPC::Connection::ThreadMessageReceiverRefCounted {
    4645public:
    47     static Ref<WebIDBServer> create(PAL::SessionID, const String& directory, WebCore::IDBServer::IDBServer::StorageQuotaManagerSpaceRequester&&, CompletionHandler<void()>&&);
     46    static Ref<WebIDBServer> create(PAL::SessionID, const String& directory, WebCore::IDBServer::IDBServer::StorageQuotaManagerSpaceRequester&&);
    4847
    4948    void getOrigins(CompletionHandler<void(HashSet<WebCore::SecurityOriginData>&&)>&&);
     
    8887    void didReceiveMessage(IPC::Connection&, IPC::Decoder&);
    8988    void dispatchToThread(WTF::Function<void()>&&);
     89    void close();
    9090
     91    bool hasConnection() const { return !m_connections.isEmpty(); }
    9192private:
    92     WebIDBServer(PAL::SessionID, const String& directory, WebCore::IDBServer::IDBServer::StorageQuotaManagerSpaceRequester&&, CompletionHandler<void()>&&);
     93    WebIDBServer(PAL::SessionID, const String& directory, WebCore::IDBServer::IDBServer::StorageQuotaManagerSpaceRequester&&);
    9394    ~WebIDBServer();
    9495
    9596    void postTask(WTF::Function<void()>&&);
    96 
    97     void close();
    98     void tryClose();
    9997
    10098    std::unique_ptr<WebCore::IDBServer::IDBServer> m_server;
     
    103101    HashMap<IPC::Connection::UniqueID, std::unique_ptr<WebIDBConnectionToClient>> m_connectionMap;
    104102    HashSet<IPC::Connection*> m_connections;
    105 
    106     enum DataTaskCounterType { };
    107     using DataTaskCounter = RefCounter<DataTaskCounterType>;
    108     using DataTaskCounterToken = DataTaskCounter::Token;
    109     DataTaskCounter m_dataTaskCounter;
    110     CompletionHandler<void()> m_closeCallback;
    111103};
    112104
  • trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp

    r275779 r275799  
    12421242}
    12431243
    1244 void NetworkConnectionToWebProcess::addIDBConnection()
    1245 {
    1246     m_networkProcess->webIDBServer(m_sessionID).addConnection(m_connection.get(), m_webProcessIdentifier);
    1247 }
    12481244
    12491245} // namespace WebKit
  • trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h

    r275779 r275799  
    187187    void broadcastConsoleMessage(JSC::MessageSource, JSC::MessageLevel, const String& message);
    188188
    189     void addIDBConnection();
    190 
    191189private:
    192190    NetworkConnectionToWebProcess(NetworkProcess&, WebCore::ProcessIdentifier, PAL::SessionID, IPC::Connection::Identifier);
  • trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in

    r275779 r275799  
    108108    SetResourceLoadSchedulingMode(WebCore::PageIdentifier webPageID, enum:uint8_t WebCore::LoadSchedulingMode mode)
    109109    PrioritizeResourceLoads(Vector<uint64_t> loadIdentifiers)
    110 
    111     AddIDBConnection()
    112110}
  • trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp

    r275784 r275799  
    392392
    393393    m_storageManagerSet->addConnection(connection.connection());
     394
     395    webIDBServer(sessionID).addConnection(connection.connection(), identifier);
    394396}
    395397
     
    551553
    552554    m_storageManagerSet->remove(sessionID);
     555
     556    removeWebIDBServerIfPossible(sessionID);
    553557}
    554558
     
    23272331    }
    23282332
    2329     auto spaceRequester = [this, weakThis = makeWeakPtr(this), sessionID](const auto& origin, uint64_t spaceRequested) {
     2333    return WebIDBServer::create(sessionID, path, [this, weakThis = makeWeakPtr(this), sessionID](const auto& origin, uint64_t spaceRequested) {
    23302334        RefPtr<StorageQuotaManager> storageQuotaManager = weakThis ? this->storageQuotaManager(sessionID, origin) : nullptr;
    23312335        return storageQuotaManager ? storageQuotaManager->requestSpaceOnBackgroundThread(spaceRequested) : StorageQuotaManager::Decision::Deny;
    2332     };
    2333     auto closeHandler = [weakThis = makeWeakPtr(this), sessionID]() {
    2334         if (weakThis)
    2335             weakThis->m_webIDBServers.remove(sessionID);
    2336     };
    2337     return WebIDBServer::create(sessionID, path, WTFMove(spaceRequester), WTFMove(closeHandler));
     2336    });
    23382337}
    23392338
     
    23632362    ASSERT(sessionStorageQuotaManager);
    23642363    sessionStorageQuotaManager->setIDBRootPath(idbRootPath);
     2364}
     2365
     2366void NetworkProcess::removeWebIDBServerIfPossible(PAL::SessionID sessionID)
     2367{
     2368    ASSERT(RunLoop::isMain());
     2369
     2370    auto iterator = m_webIDBServers.find(sessionID);
     2371    if (iterator == m_webIDBServers.end())
     2372        return;
     2373
     2374    if (m_networkSessions.contains(sessionID))
     2375        return;
     2376
     2377    if (iterator->value->hasConnection())
     2378        return;
     2379
     2380    iterator->value->close();
     2381    m_webIDBServers.remove(iterator);
    23652382}
    23662383
     
    26512668    m_storageManagerSet->removeConnection(connection);
    26522669
    2653     if (auto* server = m_webIDBServers.get(sessionID))
    2654         server->removeConnection(connection);
     2670    auto* webIDBServer = m_webIDBServers.get(sessionID);
     2671    ASSERT(webIDBServer);
     2672    webIDBServer->removeConnection(connection);
     2673    removeWebIDBServerIfPossible(sessionID);
    26552674}
    26562675
  • trunk/Source/WebKit/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp

    r275779 r275799  
    6060    : m_connectionToServer(IDBClient::IDBConnectionToServer::create(*this))
    6161{
    62     send(Messages::NetworkConnectionToWebProcess::AddIDBConnection());
    6362}
    6463
Note: See TracChangeset for help on using the changeset viewer.