Title: [252466] trunk/Source/WebKit
Revision
252466
Author
cdu...@apple.com
Date
2019-11-14 14:18:15 -0800 (Thu, 14 Nov 2019)

Log Message

[iOS] Crash under WebProcess::processTaskStateDidChange(WebKit::ProcessTaskStateObserver::TaskState)
https://bugs.webkit.org/show_bug.cgi?id=204177

Reviewed by Jer Noble.

Delay creating the ProcessTaskStateObserver until the WebProcess's connection to its parent had been
initialized. This is necessary because ProcessTaskStateObserver may call WebProcess::processTaskStateDidChange()
on a background thread, which will deference the IPC connection.

* WebProcess/WebProcess.cpp:
(WebKit::m_webSQLiteDatabaseTracker):
(WebKit::WebProcess::~WebProcess):
(WebKit::WebProcess::initializeConnection):
(WebKit::m_taskStateObserver): Deleted.
* WebProcess/WebProcess.h:

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (252465 => 252466)


--- trunk/Source/WebKit/ChangeLog	2019-11-14 22:01:08 UTC (rev 252465)
+++ trunk/Source/WebKit/ChangeLog	2019-11-14 22:18:15 UTC (rev 252466)
@@ -1,3 +1,21 @@
+2019-11-14  Chris Dumez  <cdu...@apple.com>
+
+        [iOS] Crash under WebProcess::processTaskStateDidChange(WebKit::ProcessTaskStateObserver::TaskState)
+        https://bugs.webkit.org/show_bug.cgi?id=204177
+
+        Reviewed by Jer Noble.
+
+        Delay creating the ProcessTaskStateObserver until the WebProcess's connection to its parent had been
+        initialized. This is necessary because ProcessTaskStateObserver may call WebProcess::processTaskStateDidChange()
+        on a background thread, which will deference the IPC connection.
+
+        * WebProcess/WebProcess.cpp:
+        (WebKit::m_webSQLiteDatabaseTracker):
+        (WebKit::WebProcess::~WebProcess):
+        (WebKit::WebProcess::initializeConnection):
+        (WebKit::m_taskStateObserver): Deleted.
+        * WebProcess/WebProcess.h:
+
 2019-11-14  Brady Eidson  <beid...@apple.com>
 
         Summary: WKWebView is missing an equivalent to WebKit 1's API to set the media style.

Modified: trunk/Source/WebKit/WebProcess/WebProcess.cpp (252465 => 252466)


--- trunk/Source/WebKit/WebProcess/WebProcess.cpp	2019-11-14 22:01:08 UTC (rev 252465)
+++ trunk/Source/WebKit/WebProcess/WebProcess.cpp	2019-11-14 22:18:15 UTC (rev 252466)
@@ -194,7 +194,6 @@
     , m_nonVisibleProcessCleanupTimer(*this, &WebProcess::nonVisibleProcessCleanupTimerFired)
 #if PLATFORM(IOS_FAMILY)
     , m_webSQLiteDatabaseTracker([this](bool isHoldingLockedFiles) { parentProcessConnection()->send(Messages::WebProcessProxy::SetIsHoldingLockedFiles(isHoldingLockedFiles), 0); })
-    , m_taskStateObserver(ProcessTaskStateObserver::create(*this))
 #endif
 {
     // Initialize our platform strategies.
@@ -222,9 +221,7 @@
 
 WebProcess::~WebProcess()
 {
-#if PLATFORM(IOS_FAMILY)
-    m_taskStateObserver->invalidate();
-#endif
+    ASSERT_NOT_REACHED();
 }
 
 void WebProcess::initializeProcess(const AuxiliaryProcessInitializationParameters& parameters)
@@ -267,6 +264,12 @@
         supplement->initializeConnection(connection);
 
     m_webConnection = WebConnectionToUIProcess::create(this);
+
+#if PLATFORM(IOS_FAMILY)
+    // Make sure we have an IPC::Connection before creating the ProcessTaskStateObserver since it may call
+    // WebProcess::processTaskStateDidChange() on a background thread and deference the IPC connection.
+    m_taskStateObserver = ProcessTaskStateObserver::create(*this);
+#endif
 }
 
 void WebProcess::initializeWebProcess(WebProcessCreationParameters&& parameters)

Modified: trunk/Source/WebKit/WebProcess/WebProcess.h (252465 => 252466)


--- trunk/Source/WebKit/WebProcess/WebProcess.h	2019-11-14 22:01:08 UTC (rev 252465)
+++ trunk/Source/WebKit/WebProcess/WebProcess.h	2019-11-14 22:18:15 UTC (rev 252466)
@@ -542,7 +542,7 @@
 
 #if PLATFORM(IOS_FAMILY)
     WebSQLiteDatabaseTracker m_webSQLiteDatabaseTracker;
-    Ref<ProcessTaskStateObserver> m_taskStateObserver;
+    RefPtr<ProcessTaskStateObserver> m_taskStateObserver;
     Lock m_processWasResumedUIAssertionLock;
     RetainPtr<BKSProcessAssertion> m_processWasResumedUIAssertion;
 #endif
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to