Title: [290521] trunk/Source/WebKit
Revision
290521
Author
pvol...@apple.com
Date
2022-02-25 12:08:55 -0800 (Fri, 25 Feb 2022)

Log 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:

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (290520 => 290521)


--- trunk/Source/WebKit/ChangeLog	2022-02-25 19:42:15 UTC (rev 290520)
+++ trunk/Source/WebKit/ChangeLog	2022-02-25 20:08:55 UTC (rev 290521)
@@ -1,3 +1,22 @@
+2022-02-25  Per Arne Vollan  <pvol...@apple.com>
+
+        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:
+
 2022-02-25  Youenn Fablet  <you...@apple.com>
 
         Better isolate RemoteVideoFrameObjectHeap clients from ThreadSafeObjectHeap implementation details

Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.cpp (290520 => 290521)


--- trunk/Source/WebKit/UIProcess/WebProcessPool.cpp	2022-02-25 19:42:15 UTC (rev 290520)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.cpp	2022-02-25 20:08:55 UTC (rev 290521)
@@ -329,8 +329,15 @@
         process->shutDown();
     }
 
-    if (processPools().isEmpty() && !!NetworkProcessProxy::defaultNetworkProcess())
-        NetworkProcessProxy::defaultNetworkProcess() = nullptr;
+    if (processPools().isEmpty()) {
+        WebsiteDataStore::forEachWebsiteDataStore([](auto& websiteDataStore) {
+            websiteDataStore.removeNetworkProcessReference();
+        });
+        if (auto& networkProcess = NetworkProcessProxy::defaultNetworkProcess()) {
+            ASSERT(networkProcess->hasOneRef());
+            networkProcess = nullptr;
+        }
+    }
 }
 
 void WebProcessPool::initializeClient(const WKContextClientBase* client)

Modified: trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp (290520 => 290521)


--- trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp	2022-02-25 19:42:15 UTC (rev 290520)
+++ trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp	2022-02-25 20:08:55 UTC (rev 290521)
@@ -226,6 +226,11 @@
     return const_cast<WebsiteDataStore&>(*this).networkProcess();
 }
 
+void WebsiteDataStore::removeNetworkProcessReference()
+{
+    m_networkProcess = nullptr;
+}
+
 void WebsiteDataStore::registerProcess(WebProcessProxy& process)
 {
     ASSERT(process.pageCount() || process.provisionalPageCount());

Modified: trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h (290520 => 290521)


--- trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h	2022-02-25 19:42:15 UTC (rev 290520)
+++ trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h	2022-02-25 20:08:55 UTC (rev 290521)
@@ -125,7 +125,8 @@
     NetworkProcessProxy& networkProcess() const;
     NetworkProcessProxy& networkProcess();
     NetworkProcessProxy* networkProcessIfExists() { return m_networkProcess.get(); }
-
+    void removeNetworkProcessReference();
+    
     static WebsiteDataStore* existingDataStoreForSessionID(PAL::SessionID);
 
     bool isPersistent() const { return !m_sessionID.isEphemeral(); }
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to