Add assertions to help diagnose crash at WebProcessProxy::processPool()
https://bugs.webkit.org/show_bug.cgi?id=197856
<rdar://problem/49341366>
Reviewed by Chris Dumez.
* UIProcess/WebProcessCache.cpp:
(WebKit::WebProcessCache::CachedProcess::CachedProcess):
* UIProcess/WebProcessLifetimeObserver.cpp:
(WebKit::WebProcessLifetimeObserver::addWebPage):
(WebKit::WebProcessLifetimeObserver::removeWebPage):
* UIProcess/WebProcessLifetimeObserver.h:
(WebKit::WebProcessLifetimeObserver::hasProcess const):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@245339 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog
index d154f67..10205c8 100644
--- a/Source/WebKit/ChangeLog
+++ b/Source/WebKit/ChangeLog
@@ -1,3 +1,19 @@
+2019-05-15 Sihui Liu <sihui_liu@apple.com>
+
+ Add assertions to help diagnose crash at WebProcessProxy::processPool()
+ https://bugs.webkit.org/show_bug.cgi?id=197856
+ <rdar://problem/49341366>
+
+ Reviewed by Chris Dumez.
+
+ * UIProcess/WebProcessCache.cpp:
+ (WebKit::WebProcessCache::CachedProcess::CachedProcess):
+ * UIProcess/WebProcessLifetimeObserver.cpp:
+ (WebKit::WebProcessLifetimeObserver::addWebPage):
+ (WebKit::WebProcessLifetimeObserver::removeWebPage):
+ * UIProcess/WebProcessLifetimeObserver.h:
+ (WebKit::WebProcessLifetimeObserver::hasProcess const):
+
2019-05-15 Wenson Hsieh <wenson_hsieh@apple.com>
inputmode="numeric" should show a number pad with digits 0-9, instead of the numeric keyplane
diff --git a/Source/WebKit/UIProcess/WebProcessCache.cpp b/Source/WebKit/UIProcess/WebProcessCache.cpp
index 797d7e5..88177b1 100644
--- a/Source/WebKit/UIProcess/WebProcessCache.cpp
+++ b/Source/WebKit/UIProcess/WebProcessCache.cpp
@@ -246,6 +246,8 @@
: m_process(WTFMove(process))
, m_evictionTimer(RunLoop::main(), this, &CachedProcess::evictionTimerFired)
{
+ RELEASE_ASSERT(!m_process->pageCount());
+ RELEASE_ASSERT_WITH_MESSAGE(!m_process->websiteDataStore().hasProcess(process.ptr()), "Only processes with pages should be registered with the data store");
m_process->setIsInProcessCache(true);
m_evictionTimer.startOneShot(cachedProcessLifetime);
}
diff --git a/Source/WebKit/UIProcess/WebProcessLifetimeObserver.cpp b/Source/WebKit/UIProcess/WebProcessLifetimeObserver.cpp
index 3d75abd..c8023de 100644
--- a/Source/WebKit/UIProcess/WebProcessLifetimeObserver.cpp
+++ b/Source/WebKit/UIProcess/WebProcessLifetimeObserver.cpp
@@ -26,6 +26,7 @@
#include "config.h"
#include "WebProcessLifetimeObserver.h"
+#include "Logging.h"
#include "WebPageProxy.h"
#include "WebProcessProxy.h"
@@ -42,9 +43,13 @@
void WebProcessLifetimeObserver::addWebPage(WebPageProxy& webPageProxy, WebProcessProxy& process)
{
ASSERT(process.state() == WebProcessProxy::State::Running);
+ RELEASE_ASSERT(!process.isInProcessCache());
+ RELEASE_ASSERT(!process.isPrewarmed());
- if (m_processes.add(&process).isNewEntry)
+ if (m_processes.add(&process).isNewEntry) {
+ RELEASE_LOG(Loading, "%p - WebProcessLifetimeObserver::addWebPage: webPID = %i, pageID = %" PRIu64, this, process.processIdentifier(), webPageProxy.pageID());
webProcessWillOpenConnection(process, *process.connection());
+ }
webPageWillOpenConnection(webPageProxy, *process.connection());
}
@@ -57,8 +62,10 @@
webPageDidCloseConnection(webPageProxy, *process.connection());
- if (m_processes.remove(&process))
+ if (m_processes.remove(&process)) {
+ RELEASE_LOG(Loading, "%p - WebProcessLifetimeObserver::removeWebPage: webPID = %i, pageID = %" PRIu64, this, process.processIdentifier(), webPageProxy.pageID());
webProcessDidCloseConnection(process, *process.connection());
+ }
}
WTF::IteratorRange<HashCountedSet<WebProcessProxy*>::const_iterator::Keys> WebProcessLifetimeObserver::processes() const
diff --git a/Source/WebKit/UIProcess/WebProcessLifetimeObserver.h b/Source/WebKit/UIProcess/WebProcessLifetimeObserver.h
index 61ce22b..6693973 100644
--- a/Source/WebKit/UIProcess/WebProcessLifetimeObserver.h
+++ b/Source/WebKit/UIProcess/WebProcessLifetimeObserver.h
@@ -48,6 +48,8 @@
WTF::IteratorRange<HashCountedSet<WebProcessProxy*>::const_iterator::Keys> processes() const;
+ bool hasProcess(WebProcessProxy* process) const { return m_processes.contains(process); }
+
private:
friend class WebProcessLifetimeTracker;