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