Changeset 290521 in webkit


Ignore:
Timestamp:
Feb 25, 2022 12:08:55 PM (2 years ago)
Author:
pvollan@apple.com
Message:

Make sure there is a default Networking process to provide the Launch Services database
https://bugs.webkit.org/show_bug.cgi?id=236629

Reviewed by Brent Fulgham.

The WebContent processes relies on getting the Launch Services database from the Networking process.
It is possible to enter a state where there is no default Network process, but a Network process is
running because a Website data store is holding a reference to it. This patch addresses this issue
by removing Network process references in all remaining Website data stores when the last process
pool is being deleted.

  • UIProcess/WebProcessPool.cpp:

(WebKit::WebProcessPool::~WebProcessPool):

  • UIProcess/WebsiteData/WebsiteDataStore.cpp:

(WebKit::WebsiteDataStore::removeNetworkProcessReference):

  • UIProcess/WebsiteData/WebsiteDataStore.h:
Location:
trunk/Source/WebKit
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r290513 r290521  
     12022-02-25  Per Arne Vollan  <pvollan@apple.com>
     2
     3        Make sure there is a default Networking process to provide the Launch Services database
     4        https://bugs.webkit.org/show_bug.cgi?id=236629
     5
     6        Reviewed by Brent Fulgham.
     7
     8        The WebContent processes relies on getting the Launch Services database from the Networking process.
     9        It is possible to enter a state where there is no default Network process, but a Network process is
     10        running because a Website data store is holding a reference to it. This patch addresses this issue
     11        by removing Network process references in all remaining Website data stores when the last process
     12        pool is being deleted.
     13
     14        * UIProcess/WebProcessPool.cpp:
     15        (WebKit::WebProcessPool::~WebProcessPool):
     16        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
     17        (WebKit::WebsiteDataStore::removeNetworkProcessReference):
     18        * UIProcess/WebsiteData/WebsiteDataStore.h:
     19
    1202022-02-25  Youenn Fablet  <youenn@apple.com>
    221
  • trunk/Source/WebKit/UIProcess/WebProcessPool.cpp

    r290394 r290521  
    330330    }
    331331
    332     if (processPools().isEmpty() && !!NetworkProcessProxy::defaultNetworkProcess())
    333         NetworkProcessProxy::defaultNetworkProcess() = nullptr;
     332    if (processPools().isEmpty()) {
     333        WebsiteDataStore::forEachWebsiteDataStore([](auto& websiteDataStore) {
     334            websiteDataStore.removeNetworkProcessReference();
     335        });
     336        if (auto& networkProcess = NetworkProcessProxy::defaultNetworkProcess()) {
     337            ASSERT(networkProcess->hasOneRef());
     338            networkProcess = nullptr;
     339        }
     340    }
    334341}
    335342
  • trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp

    r290329 r290521  
    227227}
    228228
     229void WebsiteDataStore::removeNetworkProcessReference()
     230{
     231    m_networkProcess = nullptr;
     232}
     233
    229234void WebsiteDataStore::registerProcess(WebProcessProxy& process)
    230235{
  • trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h

    r289721 r290521  
    126126    NetworkProcessProxy& networkProcess();
    127127    NetworkProcessProxy* networkProcessIfExists() { return m_networkProcess.get(); }
    128 
     128    void removeNetworkProcessReference();
     129   
    129130    static WebsiteDataStore* existingDataStoreForSessionID(PAL::SessionID);
    130131
Note: See TracChangeset for help on using the changeset viewer.