Use the same SWServer for all ephemeral sessions
authorcdumez@apple.com <cdumez@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 23 Mar 2018 00:00:55 +0000 (00:00 +0000)
committercdumez@apple.com <cdumez@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 23 Mar 2018 00:00:55 +0000 (00:00 +0000)
https://bugs.webkit.org/show_bug.cgi?id=183921
<rdar://problem/36873075>

Reviewed by Youenn Fablet.

Use the same SWServer for all ephemeral sessions. SWServers never go away and we create
one per sessionID. When browsing doing private browsing in Safari (and other fetching
favorite icons), the sessionID is ephemeral and keeps changing. This means that we kept
constructing new SWServers that would never go away. Each SWServer has a thread so we
would eventually hit the thread limit for the storage process.

* StorageProcess/StorageProcess.cpp:
(WebKit::StorageProcess::swServerForSession):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@229872 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebKit/ChangeLog
Source/WebKit/StorageProcess/StorageProcess.cpp

index 8f43244..4d4e820 100644 (file)
@@ -1,3 +1,20 @@
+2018-03-22  Chris Dumez  <cdumez@apple.com>
+
+        Use the same SWServer for all ephemeral sessions
+        https://bugs.webkit.org/show_bug.cgi?id=183921
+        <rdar://problem/36873075>
+
+        Reviewed by Youenn Fablet.
+
+        Use the same SWServer for all ephemeral sessions. SWServers never go away and we create
+        one per sessionID. When browsing doing private browsing in Safari (and other fetching
+        favorite icons), the sessionID is ephemeral and keeps changing. This means that we kept
+        constructing new SWServers that would never go away. Each SWServer has a thread so we
+        would eventually hit the thread limit for the storage process.
+
+        * StorageProcess/StorageProcess.cpp:
+        (WebKit::StorageProcess::swServerForSession):
+
 2018-03-22  Michael Catanzaro  <mcatanzaro@gnome.org>
 
         Unreviewed, fix format string warnings in service worker code
index e01bbb4..bd1ad50 100644 (file)
@@ -432,6 +432,11 @@ void StorageProcess::didGetSandboxExtensionsForBlobFiles(uint64_t requestID, San
 SWServer& StorageProcess::swServerForSession(PAL::SessionID sessionID)
 {
     ASSERT(sessionID.isValid());
+
+    // Use the same SWServer for all ephemeral sessions.
+    if (sessionID.isEphemeral())
+        sessionID = PAL::SessionID::legacyPrivateSessionID();
+
     auto result = m_swServers.add(sessionID, nullptr);
     if (!result.isNewEntry) {
         ASSERT(result.iterator->value);