Changeset 240931 in webkit


Ignore:
Timestamp:
Feb 4, 2019 10:51:19 AM (5 years ago)
Author:
sihui_liu@apple.com
Message:

IndexedDB: leak WebIDBConnectionToServer in layout tests
https://bugs.webkit.org/show_bug.cgi?id=193688
<rdar://problem/47353263>

Reviewed by Geoffrey Garen.

Source/WebCore:

Let IDBConnectionToServer keep a WeakPtr of IDBConnectionToServerDelegate.

  • Modules/indexeddb/client/IDBConnectionToServer.cpp:

(WebCore::IDBClient::IDBConnectionToServer::IDBConnectionToServer):

  • Modules/indexeddb/client/IDBConnectionToServer.h:
  • Modules/indexeddb/client/IDBConnectionToServerDelegate.h:

Source/WebKit:

  • NetworkProcess/NetworkConnectionToWebProcess.cpp:

(WebKit::NetworkConnectionToWebProcess::didClose):
(WebKit::NetworkConnectionToWebProcess::establishIDBConnectionToServer):
(WebKit::NetworkConnectionToWebProcess::removeIDBConnectionToServer): Deleted.

  • NetworkProcess/NetworkConnectionToWebProcess.h:
  • NetworkProcess/NetworkConnectionToWebProcess.messages.in:
  • WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:

(WebKit::WebIDBConnectionToServer::~WebIDBConnectionToServer):

Location:
trunk/Source
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r240930 r240931  
     12019-02-04  Sihui Liu  <sihui_liu@apple.com>
     2
     3        IndexedDB: leak WebIDBConnectionToServer in layout tests
     4        https://bugs.webkit.org/show_bug.cgi?id=193688
     5        <rdar://problem/47353263>
     6
     7        Reviewed by Geoffrey Garen.
     8
     9        Let IDBConnectionToServer keep a WeakPtr of IDBConnectionToServerDelegate.
     10
     11        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
     12        (WebCore::IDBClient::IDBConnectionToServer::IDBConnectionToServer):
     13        * Modules/indexeddb/client/IDBConnectionToServer.h:
     14        * Modules/indexeddb/client/IDBConnectionToServerDelegate.h:
     15
    1162019-02-04  Youenn Fablet  <youenn@apple.com>
    217
  • trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.cpp

    r233562 r240931  
    4949
    5050IDBConnectionToServer::IDBConnectionToServer(IDBConnectionToServerDelegate& delegate)
    51     : m_delegate(delegate)
     51    : m_delegate(makeWeakPtr(delegate))
    5252    , m_proxy(std::make_unique<IDBConnectionProxy>(*this))
    5353{
  • trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.h

    r233562 r240931  
    147147    void callResultFunctionWithErrorLater(ResultFunction, const IDBResourceIdentifier& requestIdentifier);
    148148   
    149     Ref<IDBConnectionToServerDelegate> m_delegate;
     149    WeakPtr<IDBConnectionToServerDelegate> m_delegate;
    150150    bool m_serverConnectionIsValid { true };
    151151
  • trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServerDelegate.h

    r223728 r240931  
    2828#if ENABLE(INDEXED_DATABASE)
    2929
     30#include <wtf/WeakPtr.h>
    3031#include <wtf/text/WTFString.h>
    3132
     
    5455namespace IDBClient {
    5556
    56 class IDBConnectionToServerDelegate {
     57class IDBConnectionToServerDelegate : public CanMakeWeakPtr<IDBConnectionToServerDelegate> {
    5758public:
    5859    virtual ~IDBConnectionToServerDelegate() = default;
  • trunk/Source/WebKit/ChangeLog

    r240929 r240931  
     12019-02-04  Sihui Liu  <sihui_liu@apple.com>
     2
     3        IndexedDB: leak WebIDBConnectionToServer in layout tests
     4        https://bugs.webkit.org/show_bug.cgi?id=193688
     5        <rdar://problem/47353263>
     6
     7        Reviewed by Geoffrey Garen.
     8
     9        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
     10        (WebKit::NetworkConnectionToWebProcess::didClose):
     11        (WebKit::NetworkConnectionToWebProcess::establishIDBConnectionToServer):
     12        (WebKit::NetworkConnectionToWebProcess::removeIDBConnectionToServer): Deleted.
     13        * NetworkProcess/NetworkConnectionToWebProcess.h:
     14        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
     15        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
     16        (WebKit::WebIDBConnectionToServer::~WebIDBConnectionToServer):
     17
    1182019-02-04  Antoine Quint  <graouts@apple.com>
    219
  • trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp

    r240696 r240931  
    264264    for (auto& connection : idbConnections.values())
    265265        connection->disconnectedFromWebProcess();
    266    
     266
    267267    m_webIDBConnections.clear();
    268268#endif
     
    754754    m_webIDBConnections.set(serverConnectionIdentifier, WebIDBConnectionToClient::create(m_networkProcess, m_connection.get(), serverConnectionIdentifier, sessionID));
    755755}
    756 
    757 void NetworkConnectionToWebProcess::removeIDBConnectionToServer(uint64_t serverConnectionIdentifier)
    758 {
    759     ASSERT(m_webIDBConnections.contains(serverConnectionIdentifier));
    760    
    761     auto connection = m_webIDBConnections.take(serverConnectionIdentifier);
    762     connection->disconnectedFromWebProcess();
    763 }
    764756#endif
    765757   
  • trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h

    r240676 r240931  
    176176    // Messages handlers (Modern IDB).
    177177    void establishIDBConnectionToServer(PAL::SessionID, uint64_t& serverConnectionIdentifier);
    178     void removeIDBConnectionToServer(uint64_t serverConnectionIdentifier);
    179178#endif
    180179
  • trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in

    r240676 r240931  
    8080#if ENABLE(INDEXED_DATABASE)
    8181    EstablishIDBConnectionToServer(PAL::SessionID sessionID) -> (uint64_t serverConnectionIdentifier) LegacySync
    82     RemoveIDBConnectionToServer(uint64_t serverConnectionIdentifier)
    8382#endif
    8483
  • trunk/Source/WebKit/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp

    r238283 r240931  
    6565    m_isOpenInServer = sendSync(Messages::NetworkConnectionToWebProcess::EstablishIDBConnectionToServer(sessionID), Messages::NetworkConnectionToWebProcess::EstablishIDBConnectionToServer::Reply(m_identifier));
    6666
    67     // FIXME: This creates a reference cycle, so neither this object nor the IDBConnectionToServer will ever be deallocated.
    6867    m_connectionToServer = IDBClient::IDBConnectionToServer::create(*this);
    6968}
     
    7170WebIDBConnectionToServer::~WebIDBConnectionToServer()
    7271{
    73     if (m_isOpenInServer)
    74         send(Messages::NetworkConnectionToWebProcess::RemoveIDBConnectionToServer(m_identifier));
    7572}
    7673
Note: See TracChangeset for help on using the changeset viewer.