Changeset 248597 in webkit


Ignore:
Timestamp:
Aug 13, 2019 10:08:54 AM (5 years ago)
Author:
sihui_liu@apple.com
Message:

Make sure UniqueIDBDatabaseConnection unregister itself from IDBServer
https://bugs.webkit.org/show_bug.cgi?id=200650
<rdar://problem/54236010>

Reviewed by Youenn Fablet.

We register UniqueIDBDatabaseConnection unconditionally to IDBServer but fail to unregister if UniqueIDBDatabase
of UniqueIDBDatabaseConnection is gone.

  • Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp:

(WebCore::IDBServer::UniqueIDBDatabaseConnection::UniqueIDBDatabaseConnection):
(WebCore::IDBServer::UniqueIDBDatabaseConnection::~UniqueIDBDatabaseConnection):

  • Modules/indexeddb/server/UniqueIDBDatabaseConnection.h:

(WebCore::IDBServer::UniqueIDBDatabaseConnection::server):

  • Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp:

(WebCore::IDBServer::UniqueIDBDatabaseTransaction::UniqueIDBDatabaseTransaction):
(WebCore::IDBServer::UniqueIDBDatabaseTransaction::~UniqueIDBDatabaseTransaction):

  • Modules/indexeddb/server/UniqueIDBDatabaseTransaction.h:
Location:
trunk/Source/WebCore
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r248596 r248597  
     12019-08-13  Sihui Liu  <sihui_liu@apple.com>
     2
     3        Make sure UniqueIDBDatabaseConnection unregister itself from IDBServer
     4        https://bugs.webkit.org/show_bug.cgi?id=200650
     5        <rdar://problem/54236010>
     6
     7        Reviewed by Youenn Fablet.
     8
     9        We register UniqueIDBDatabaseConnection unconditionally to IDBServer but fail to unregister if UniqueIDBDatabase
     10        of UniqueIDBDatabaseConnection is gone.
     11
     12        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp:
     13        (WebCore::IDBServer::UniqueIDBDatabaseConnection::UniqueIDBDatabaseConnection):
     14        (WebCore::IDBServer::UniqueIDBDatabaseConnection::~UniqueIDBDatabaseConnection):
     15        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.h:
     16        (WebCore::IDBServer::UniqueIDBDatabaseConnection::server):
     17        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp:
     18        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::UniqueIDBDatabaseTransaction):
     19        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::~UniqueIDBDatabaseTransaction):
     20        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.h:
     21
    1222019-08-13  Zalan Bujtas  <zalan@apple.com>
    223
  • trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp

    r244027 r248597  
    4646UniqueIDBDatabaseConnection::UniqueIDBDatabaseConnection(UniqueIDBDatabase& database, ServerOpenDBRequest& request)
    4747    : m_database(makeWeakPtr(database))
     48    , m_server(makeWeakPtr(m_database->server()))
    4849    , m_connectionToClient(request.connection())
    4950    , m_openRequestIdentifier(request.requestData().requestIdentifier())
    5051{
    51     m_database->server().registerDatabaseConnection(*this);
     52    m_server->registerDatabaseConnection(*this);
    5253    m_connectionToClient->registerDatabaseConnection(*this);
    5354}
     
    5556UniqueIDBDatabaseConnection::~UniqueIDBDatabaseConnection()
    5657{
    57     if (m_database)
    58         m_database->server().unregisterDatabaseConnection(*this);
     58    if (m_server)
     59        m_server->unregisterDatabaseConnection(*this);
    5960    m_connectionToClient->unregisterDatabaseConnection(*this);
    6061}
  • trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.h

    r246596 r248597  
    5555    const IDBResourceIdentifier& openRequestIdentifier() { return m_openRequestIdentifier; }
    5656    UniqueIDBDatabase* database() { return m_database.get(); }
     57    IDBServer* server() { return m_server.get(); }
    5758    IDBConnectionToClient& connectionToClient() { return m_connectionToClient; }
    5859
     
    9192
    9293    WeakPtr<UniqueIDBDatabase> m_database;
     94    WeakPtr<IDBServer> m_server;
    9395    Ref<IDBConnectionToClient> m_connectionToClient;
    9496    IDBResourceIdentifier m_openRequestIdentifier;
  • trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp

    r244027 r248597  
    5454        m_originalDatabaseInfo = std::make_unique<IDBDatabaseInfo>(database->info());
    5555
    56     auto& server = database->server();
    57     m_server = makeWeakPtr(server);
    58     server.registerTransaction(*this);
     56    if (auto* server = m_databaseConnection->server())
     57        server->registerTransaction(*this);
    5958}
    6059
     
    6463        database->transactionDestroyed(*this);
    6564
    66     if (m_server)
    67         m_server->unregisterTransaction(*this);
     65    if (auto* server = m_databaseConnection->server())
     66        server->unregisterTransaction(*this);
    6867}
    6968
  • trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseTransaction.h

    r246596 r248597  
    102102    Ref<UniqueIDBDatabaseConnection> m_databaseConnection;
    103103    IDBTransactionInfo m_transactionInfo;
    104     WeakPtr<IDBServer> m_server;
    105104
    106105    std::unique_ptr<IDBDatabaseInfo> m_originalDatabaseInfo;
Note: See TracChangeset for help on using the changeset viewer.