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