Title: [249723] trunk/Source/WebKit
Revision
249723
Author
cdu...@apple.com
Date
2019-09-10 11:14:15 -0700 (Tue, 10 Sep 2019)

Log Message

Hangs on Swiss.com due to the web process being blocked on StorageAreaMap::LoadValuesIfNeeded
https://bugs.webkit.org/show_bug.cgi?id=201644
<rdar://problem/54942761>

Reviewed by Geoffrey Garen.

Mark the StorageManagerSet::GetValues sync IPC from the WebContent process to the Network
process with a UnboundedSynchronousIPCScope so that it will process critical sync IPC
from the UIProcess (such as WebPage::GetPositionInformation) while waiting for a reply.

* WebProcess/WebStorage/StorageAreaMap.cpp:
(WebKit::StorageAreaMap::loadValuesIfNeeded):

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (249722 => 249723)


--- trunk/Source/WebKit/ChangeLog	2019-09-10 17:41:32 UTC (rev 249722)
+++ trunk/Source/WebKit/ChangeLog	2019-09-10 18:14:15 UTC (rev 249723)
@@ -1,3 +1,18 @@
+2019-09-10  Chris Dumez  <cdu...@apple.com>
+
+        Hangs on Swiss.com due to the web process being blocked on StorageAreaMap::LoadValuesIfNeeded
+        https://bugs.webkit.org/show_bug.cgi?id=201644
+        <rdar://problem/54942761>
+
+        Reviewed by Geoffrey Garen.
+
+        Mark the StorageManagerSet::GetValues sync IPC from the WebContent process to the Network
+        process with a UnboundedSynchronousIPCScope so that it will process critical sync IPC
+        from the UIProcess (such as WebPage::GetPositionInformation) while waiting for a reply.
+
+        * WebProcess/WebStorage/StorageAreaMap.cpp:
+        (WebKit::StorageAreaMap::loadValuesIfNeeded):
+
 2019-09-10  David Quesada  <david_ques...@apple.com>
 
         Remove a leftover reference to the StorageProcess

Modified: trunk/Source/WebKit/WebProcess/WebStorage/StorageAreaMap.cpp (249722 => 249723)


--- trunk/Source/WebKit/WebProcess/WebStorage/StorageAreaMap.cpp	2019-09-10 17:41:32 UTC (rev 249722)
+++ trunk/Source/WebKit/WebProcess/WebStorage/StorageAreaMap.cpp	2019-09-10 18:14:15 UTC (rev 249723)
@@ -160,10 +160,11 @@
     if (m_storageMap)
         return;
 
+    // The StorageManagerSet::GetValues() IPC may be very slow because it may need to fetch the values from disk and there may be a lot
+    // of data.
+    IPC::UnboundedSynchronousIPCScope unboundedSynchronousIPCScope;
+
     HashMap<String, String> values;
-    // FIXME: This should use a special sendSync flag to indicate that we don't want to process incoming messages while waiting for a reply.
-    // (This flag does not yet exist). Since loadValuesIfNeeded() ends up being called from within _javascript_ code, processing incoming synchronous messages
-    // could lead to weird reentrency bugs otherwise.
     WebProcess::singleton().ensureNetworkProcessConnection().connection().sendSync(Messages::StorageManagerSet::GetValues(*m_storageMapID), Messages::StorageManagerSet::GetValues::Reply(values), 0);
 
     m_storageMap = StorageMap::create(m_quotaInBytes);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to